#!/usr/bin/env python3
"""exp14b §2 — слепой head-to-head пакет P1a(=C, glm-5 дискурс) ↔ F-disc(=F, gpt-5.4 дискурс)
на главах 17/18/19 (+ оригинал для верности). Метки U1/U2 перемешаны по главам, ключ отдельно.
Копирайт: ВНЕ git.
"""
from __future__ import annotations
import json, random, sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "exp14"))  # exp14b reuses exp14's harness (exp14_common lives in eval/exp14/)
import exp14_common as C

ARMS = Path("/home/ubuntu/books/gu-zhenren/exp14b/arms")
RERUN = Path("/home/ubuntu/books/gu-zhenren/rerun")
RECS = {(r["chapter"], r["chunk_idx"]): r for r in json.load(open(RERUN / "records.json"))}
OUT = Path("/home/ubuntu/books/gu-zhenren/exp14b/monitor"); OUT.mkdir(parents=True, exist_ok=True)
FINALISTS = {"cheap-P1a": "C", "frontier-F-disc": "F"}
CHAPTERS = [19, 17, 18]
CHUNKS = {19: [0, 1], 17: [0, 1], 18: [0, 1, 2]}
SALT = "exp14b-h2h-blind-v1"


def ch_text(arm, ch):
    return "\n\n".join((ARMS / arm / f"{ch}.{ck}.txt").read_text(encoding="utf-8") for ck in CHUNKS[ch])
def ch_src(ch):
    return "\n".join(RECS[(ch, ck)]["source"] for ck in CHUNKS[ch])


def main():
    miss = [(f, ch, ck) for f, a in FINALISTS.items() for ch in CHAPTERS for ck in CHUNKS[ch]
            if not (ARMS / a / f"{ch}.{ck}.txt").exists()]
    if miss:
        print("⚠ нет выходов:", miss[:8]); return
    key = {}
    md = ["# exp14b head-to-head — P1a(дешёвый дискурс) ↔ F-disc(фронтир). Слепо.\n",
          "Две версии на главу (U1/U2, порядок в каждой главе СВОЙ). Сверху китайский оригинал. "
          "Оцени РАЗДЕЛЬНО: (A) какая читается лучше как русская проза; (B) верность смыслу (сверяя с "
          "оригиналом) — смысловые ошибки/инверсии со спанами. Насколько дешёвый близок к фронтиру? Ключ — `_КЛЮЧ.json`, ПОСЛЕ.\n"]
    for ch in CHAPTERS:
        order = list(FINALISTS); random.Random(f"{SALT}-{ch}").shuffle(order)
        labels = {f"U{i+1}": order[i] for i in range(len(order))}
        key[str(ch)] = {lab: {"finalist": fin, "arm": FINALISTS[fin]} for lab, fin in labels.items()}
        md.append(f"\n\n{'='*60}\n## Глава {ch}\n{'='*60}\n\n### ОРИГИНАЛ (zh)\n\n```\n{ch_src(ch)}\n```\n")
        for lab in ("U1", "U2"):
            md.append(f"\n### {lab}\n\n{ch_text(FINALISTS[labels[lab]], ch)}\n")
    (OUT / "h2h.md").write_text("\n".join(md), encoding="utf-8")
    (OUT / "_КЛЮЧ.json").write_text(json.dumps({"salt": SALT, "finalists": FINALISTS, "per_chapter": key}, ensure_ascii=False, indent=1), encoding="utf-8")
    print(f"→ {OUT/'h2h.md'} (2 версии × 3 главы + оригинал)")
    for ch in CHAPTERS:
        print(f"  гл.{ch}: " + ", ".join(f"{lab}={key[str(ch)][lab]['finalist']}" for lab in ("U1","U2")))


if __name__ == "__main__":
    main()
