import json, sys, collections
sys.path.insert(0, "/tmp/claude-1000/-var-www-html-peta/310517d2-8f28-442b-9907-0e3560add2cb/scratchpad")
from r2b02_decisions import D
inp = "/var/www/html/peta/storage/app/propertylab-catalogue-match/review/r2_batch_02_in.jsonl"
out = "/var/www/html/peta/storage/app/propertylab-catalogue-match/review/r2_batch_02_out.jsonl"
cases = [json.loads(l) for l in open(inp)]
dec = {}
errors = []
for row in D:
    c, v, k, conf, reason, web = row
    if c in dec: errors.append(f"dup decision {c}")
    dec[c] = row
ids = [c["case"] for c in cases]
if len(ids) != len(set(ids)): errors.append("dup input ids")
missing = [i for i in ids if i not in dec]
extra = [i for i in dec if i not in set(ids)]
if missing: errors.append(f"missing {missing}")
if extra: errors.append(f"extra {extra}")
lines = []
for c in cases:
    cid = c["case"]
    if cid not in dec: continue
    _, v, k, conf, reason, web = dec[cid]
    ks = {x["k"] for x in c["catalogue_candidates"]}
    if v not in ("SAME","PART_OF","DIFFERENT","UNSURE"): errors.append(f"{cid} bad verdict")
    if conf not in ("high","medium","low"): errors.append(f"{cid} bad conf")
    if v == "DIFFERENT" and k is not None: errors.append(f"{cid} DIFFERENT with cand")
    if v in ("SAME","PART_OF") and k is None: errors.append(f"{cid} {v} without cand")
    if k is not None and k not in ks: errors.append(f"{cid} cand {k} not in {ks}")
    nw = len(reason.split())
    if nw > 20: errors.append(f"{cid} reason {nw} words")
    lines.append(json.dumps({"case":cid,"verdict":v,"cand":k,"confidence":conf,"reason":reason,"web":web}, ensure_ascii=False))
if errors:
    print("ERRORS:"); print("\n".join(errors)); sys.exit(1)
with open(out, "w") as f:
    f.write("\n".join(lines) + "\n")
print("wrote", len(lines), "lines")
vc = collections.Counter(dec[i][1] for i in ids)
cc = collections.Counter(dec[i][3] for i in ids)
wc = sum(1 for i in ids if dec[i][5])
print("verdicts:", dict(vc)); print("confidence:", dict(cc)); print("web:", wc)
print("verdict x conf:", dict(collections.Counter((dec[i][1], dec[i][3]) for i in ids)))
