"""Verify recorded runs and derive a compact reusable evidence matrix."""
import hashlib
import json
from pathlib import Path
from experiment import verify_case

ROOT = Path(__file__).resolve().parent
if not __debug__:
    raise RuntimeError("Run without -O: assertions are part of verification")
runs = [json.loads((ROOT / f"results-{n}.json").read_text()) for n in (1, 2)]
rows = []
for result in runs:
    assert result["assertions_passed"] is True
    assert result["harness_sha256"] == hashlib.sha256((ROOT / "experiment.py").read_bytes()).hexdigest()
    for case in result["cases"]:
        verify_case(case)
        assert case["settings"]["checksums"] == ("on" if case["checksums"] else "off")
        assert case["settings"]["ignore_checksum_failure"] == "off"
        assert case["settings"]["block_size"] == "8192"
        assert case["mutation"]["changed_bytes"] == 1
        assert case["mutation"]["xor_mask"] == 1
        assert case["toast_chunks"] == 13
        for state in ("clean", "damaged"):
            if not case["checksums"]:
                check = case[state]["offline_checksums"]
                assert check["returncode"] != 0 and "not enabled" in check["stderr"]
for name in runs[0]["cases"][0]["clean"]["probes"]:
    row = {"probe": name}
    for case in runs[0]["cases"]:
        for state in ("clean", "damaged"):
            probe = case[state]["probes"][name]
            label = ("on" if case["checksums"] else "off") + "_" + state
            row[label] = {"returncode": probe["returncode"]}
            if name == "whole_sha256" and probe["returncode"] == 0:
                row[label]["matches_expected"] = probe["stdout"] == runs[0]["fixture"]["expected_sha256"]
    rows.append(row)
summary = {
    "schema_version": 1, "experiment": "postgresql-toast-coverage",
    "replications": 2, "fresh_clusters": 4, "states": 8,
    "online_probes": sum(len(c[s]["probes"]) for r in runs for c in r["cases"] for s in ("clean", "damaged")),
    "offline_invocations": 8, "offline_enabled_checks": 4,
    "offline_disabled_refusals": 4,
    "interpretation": "Designed cases, not independent random samples or a failure-rate estimate",
    "rows": rows,
    "sha256": {name: hashlib.sha256((ROOT / name).read_bytes()).hexdigest()
               for name in ("experiment.py", "test_experiment.py", "verify.py", "results-1.json", "results-2.json")},
}
(ROOT / "summary.json").write_text(json.dumps(summary, indent=2) + "\n")
print(json.dumps({k: v for k, v in summary.items() if k not in ("rows", "sha256")}))
