#!/usr/bin/env python3
"""Verify historical capital1000 public package integrity + summary consistency."""
from __future__ import annotations
import hashlib, json, sys
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]

def h(b: bytes) -> str:
    return hashlib.sha256(b).hexdigest()

def main() -> int:
    fails = []
    summary = json.loads((ROOT/"summary.json").read_text(encoding="utf-8"))
    can = (ROOT/"summary.canonical").read_bytes()
    if h(can) != (ROOT/"summary.sha256").read_text().strip().split()[0]:
        fails.append("summary sha mismatch")
    # canonical must match sorted keys content of summary object fields used
    agg = json.loads((ROOT/"aggregates.json").read_text(encoding="utf-8"))
    if agg.get("ANSWER") != summary.get("rolling_inception", {}).get("ANSWER"):
        fails.append("ANSWER mismatch summary vs aggregates")
    if agg.get("CLAIM_SUPPORTED") != summary.get("rolling_inception", {}).get("CLAIM_SUPPORTED"):
        fails.append("CLAIM_SUPPORTED mismatch")
    fin = summary.get("finite_capital_study", {}).get("WITH_1000_EUR", {})
    afin = agg.get("finite_WITH_1000_EUR", {})
    for k in ("FULL_EXPECTANCY", "SELECTED_EXPECTANCY", "FULL_PF", "SELECTED_PF"):
        if fin.get(k) != afin.get(k):
            fails.append(f"metric mismatch {k}")
    # SHA256SUMS
    sums = (ROOT/"SHA256SUMS.txt").read_text(encoding="utf-8").splitlines()
    for line in sums:
        if not line.strip():
            continue
        sha, path = line.split("  ", 1)
        p = ROOT / path
        if not p.is_file():
            fails.append("missing "+path)
        elif h(p.read_bytes()) != sha:
            fails.append("sha fail "+path)
    # claim class honesty
    if summary.get("claim_class") != "POST_HOC_HISTORICAL_VALIDATION_EXTERNALLY_TIMESTAMPED_NOW":
        fails.append("claim_class unexpected")
    man = json.loads((ROOT/"manifest.json").read_text(encoding="utf-8"))
    if man.get("summary_sha256") != (ROOT/"summary.sha256").read_text().strip().split()[0]:
        fails.append("manifest summary_sha256 mismatch")
    if man.get("claim_class") != summary.get("claim_class"):
        fails.append("manifest claim_class mismatch")
    pkg = (ROOT/"PACKAGE.sha256").read_text().strip().split()[0]
    if h((ROOT/"PACKAGE.canonical").read_bytes()) != pkg:
        fails.append("PACKAGE sha mismatch")
    if fails:
        print("HISTORICAL_PACKAGE_VERIFY=FAIL")
        for f in fails:
            print("FAIL="+f)
        return 1
    print("HISTORICAL_PACKAGE_VERIFY=PASS")
    print("PACKAGE_SHA256="+pkg)
    print("PUBLICLY_RECOMPUTABLE_HEADLINES=YES")
    print("PUBLICLY_RECOMPUTABLE_PER_START_REPLAY=NO")
    return 0

if __name__ == "__main__":
    raise SystemExit(main())
