"""Reproduce reference agreement offline; no model, network, or credentials."""

import hashlib
import json
from pathlib import Path

from scoring import grade, unique_object

ROOT = Path(__file__).resolve().parent
FILES = {
    "README.md", "scoring.py", "verify.py", "cases.jsonl", "results.jsonl",
    "benchmark.json", "LICENSE-GSM8K.txt", "index.html",
}


def read_json(path):
    return json.loads(path.read_bytes(), object_pairs_hook=unique_object)


def verify(directory=ROOT):
    entries = list(directory.iterdir())
    if any(not entry.is_file() for entry in entries) or {p.name for p in entries} != FILES | {"manifest.json"}:
        raise ValueError("Unexpected or missing release files.")
    manifest = read_json(directory / "manifest.json")
    if set(manifest) != FILES:
        raise ValueError("Manifest must cover exactly the release allowlist.")
    for name in sorted(FILES):
        if hashlib.sha256((directory / name).read_bytes()).hexdigest() != manifest[name]:
            raise ValueError(f"Release checksum mismatch: {name}")
    cases = [json.loads(line, object_pairs_hook=unique_object)
             for line in (directory / "cases.jsonl").read_bytes().splitlines()]
    results = [json.loads(line, object_pairs_hook=unique_object)
               for line in (directory / "results.jsonl").read_bytes().splitlines()]
    if len(cases) != 64 or len(results) != 64 or len({c["case_id"] for c in cases}) != 64:
        raise ValueError("Exactly 64 unique cases and ordered results are required.")
    counts = {"correct": 0, "wrong_answer": 0, "invalid_output": 0}
    for case, result in zip(cases, results):
        if set(case) != {"case_id", "source_test_index", "question", "expected_answer"}:
            raise ValueError("Unexpected case fields.")
        if set(result) != {"case_id", "raw_final_text"} or result["case_id"] != case["case_id"]:
            raise ValueError("Unexpected result fields or ordering.")
        counts[grade(result["raw_final_text"], case["expected_answer"])["status"]] += 1
    benchmark = read_json(directory / "benchmark.json")
    if counts != benchmark["status_counts"] or sum(counts.values()) != benchmark["planned_cases"]:
        raise ValueError("Published counts do not reproduce.")
    agreement = counts["correct"] / len(cases)
    if agreement != benchmark["official_reference_agreement"]:
        raise ValueError("Published reference agreement does not reproduce.")
    return {
        "planned_cases": len(cases), "status_counts": counts,
        "official_reference_agreement": agreement,
        "scope": "Offline scoring and file-integrity verification, not proof of model execution.",
    }


if __name__ == "__main__":
    print(json.dumps(verify(), indent=2))
