"""Collect every trial's grade and agent summary into results.json and print a table."""
import json
from pathlib import Path

HERE = Path(__file__).resolve().parent
rows = []
for d in sorted((HERE / "trials").glob("*_*_*_*")):
    if not d.is_dir() or not (d / "grade.json").exists():
        continue
    lang, tier, arm, rep = d.name.split("_")
    g = json.loads((d / "grade.json").read_text(encoding="utf-8"))
    s = json.loads((d / "log" / "summary.json").read_text(encoding="utf-8"))
    row = {"id": d.name, "lang": lang, "tier": tier, "arm": arm, "rep": int(rep),
           "tool_calls": s["tool_calls"], "minutes": round(s["seconds"] / 60, 1)}
    if tier == "simple":
        row.update(passed=g["pass"], terms_missing=g["terms_missing"], tic_left=g["tic_left"])
    else:
        gs = g["summary"]
        ts = g["timestamps"]
        p2 = [e for e in ts if e["in_part2"]]
        row.update(covered=gs["covered"], phone_covered=gs["phone_covered"], duplicated=gs["duplicated_utterances"],
                   part2_paragraphs_off=f"{sum(e['err'] > 0 for e in p2)}/{len(p2)}",
                   part1_paragraphs_off=f"{sum(e['err'] > 0 for e in ts if not e['in_part2'])}/{len(ts) - len(p2)}",
                   terms=gs["terms_written_vs_spoken"])
        ph_ok = gs["phone_covered"].split("/")[0] == gs["phone_covered"].split("/")[1]
        row["all_criteria_met"] = (gs["covered"].split("/")[0] == gs["covered"].split("/")[1] and gs["duplicated_utterances"] == 0
                                   and sum(e["err"] > 0 for e in ts) == 0 and ph_ok)
    rows.append(row)
(HERE / "results.json").write_text(json.dumps(rows, ensure_ascii=False, indent=1), encoding="utf-8")
for r in rows:
    print({k: v for k, v in r.items() if k != "terms"})
