import subprocess, json, sys, concurrent.futures as cf, pathlib
docs = {k: pathlib.Path(f).read_text() for k,f in [("旧マニュアル","doc1_old_manual.md"),("通達メール","doc2_notice.md"),("議事録","doc3_minutes.md")]}
def block(order):
    return "\n\n".join(f"<資料 名前=\"{k}\">\n{docs[k]}\n</資料>" for k in order)
A_PROMPT = "次の資料をもとに、入社したばかりの社員向けの備品発注マニュアルを作ってください。ファイルは作らず、本文をそのまま返答に書いてください。\n\n"
B_RULES = """次の資料をもとに、入社したばかりの社員向けの備品発注マニュアルを作ってください。ファイルは作らず、本文をそのまま返答に書いてください。

読者は、今日から備品を発注する新入社員です。紙に印刷して、見ながら一人で発注します。

資料は複数あり、書かれた時期が違います。次のルールを守ってください。
- 各資料の日付を確認する。食い違うときは、新しい資料の内容を採用する
- 古い資料にだけ書かれていて、新しい資料で変更・廃止された内容は、手順に入れない
- 手順は、番号付きで1文1動作。実際に行う順に書く
- 資料に書かれていないことは足さない。決まっていないこと、資料から決められないことは「要確認」と書く
- 最後に「資料間の食い違い」という表を付け、どの資料のどの内容を、どの資料の内容に基づいて採用しなかったかを書く
"""
CONDS = {
 "A": (A_PROMPT, ["旧マニュアル","通達メール","議事録"]),
 "A_rev": (A_PROMPT, ["議事録","通達メール","旧マニュアル"]),
 "B": (B_RULES+"\n", ["旧マニュアル","通達メール","議事録"]),
 "B_rev": (B_RULES+"\n", ["議事録","通達メール","旧マニュアル"]),
}
def call(cond, i, model):
    head, order = CONDS[cond]
    p = head + block(order)
    out = pathlib.Path(f"out/{model}_{cond}_{i}.md")
    if out.exists(): return
    r = subprocess.run(["claude","-p","--model",model,"--tools","","--setting-sources","","--no-session-persistence","--disable-slash-commands","--strict-mcp-config","--output-format","json"],input=p,capture_output=True,text=True,cwd="/tmp/manual-ai/e/work")
    j = json.loads(r.stdout)
    out.write_text(j["result"])
    pathlib.Path(f"out/{model}_{cond}_{i}.meta").write_text(json.dumps({"cost":j.get("total_cost_usd"),"usage":j.get("usage")}))
pathlib.Path("out").mkdir(exist_ok=True)
jobs=[(c,i,m) for m in ["claude-opus-5-5","haiku"] for c in CONDS for i in range(1,6)]
with cf.ThreadPoolExecutor(6) as ex: list(ex.map(lambda a: call(*a), jobs))
