"""口調だけ渡す基準条件に、5つの要素を1つずつ足して投稿を作らせる。条件7 × お題3 × 4回 = 84本。"""
import concurrent.futures as cf, json, pathlib, subprocess, sys, tempfile
from materials import *

N = int(sys.argv[1]) if len(sys.argv) > 1 else 4
OUT = pathlib.Path("runs"); OUT.mkdir(exist_ok=True)

EXTRA = {"P": POSITION, "N": NOTES, "S": SAMPLES, "A": AVOID, "F": FIXES, "G": FIXES.replace("【fixes.md】AIが作った案を店主が直した例", "【fixes.md】AIが作った案を店主が直した例。※例の文そのものは、今回の投稿に使わないでください。直した理由だけを生かしてください。")}
CONDS = {"base": "", "noguard": "", "P": "P", "N": "N", "S": "S", "A": "A", "F": "F", "ALL": "PNSAF", "F2": "G", "ALL2": "PNSAG"}

def build(cond, task):
    parts = [f"X（旧Twitter）に載せる投稿を書いてもらいます。口調の指定：{TONE}", "# 資料（事実の根拠）", CORE]
    for k in CONDS[cond]:
        parts += [f"# 追加資料", EXTRA[k]]
    parts += ["# 依頼", TASKS[task][1],
              "投稿本文だけを出力してください。説明や前置きは不要です。" + ("" if cond == "noguard" else "資料にない事実・体験・数字は書かないでください。")]
    return "\n\n".join(parts)

def ask(prompt):
    with tempfile.TemporaryDirectory() as d:
        r = subprocess.run(["claude", "-p", "--tools", "", "--no-session-persistence",
                            "--disable-slash-commands", "--output-format", "json"],
                           input=prompt, capture_output=True, text=True, cwd=d, timeout=900)
    return json.loads(r.stdout)["result"].strip()

def one(c, t, i):
    p = OUT / f"{c}_{t}_{i}.txt"
    if p.exists() and p.read_text().strip(): return
    p.write_text(ask(build(c, t)))

if __name__ == "__main__":
    jobs = [(c, t, i) for c in CONDS for t in TASKS for i in range(N)]
    with cf.ThreadPoolExecutor(8) as ex:
        for f in [ex.submit(one, *j) for j in jobs]: f.result()
