#!/usr/bin/env python3
from __future__ import annotations

import argparse
import json
import zipfile
from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]
ALLOWED_TEMP_FILES = {
    "Temp/final_decision_packet_active.json",
    "Temp/final_decision_packet_v4.json",
    "Temp/operational_report.json",
    "Temp/operational_report.md",
    "Temp/release_dag_run_v1.json",
    "Temp/pipeline_runtime_profile_v1.json",
    "Temp/engine_harness_gate_result.json",
    "Temp/strategy_hardening_harness_v2.json",
    "Temp/data_integrity_100_lock_v2.json",
    "Temp/number_provenance_ledger_v4.json",
    "Temp/final_context_for_llm_v4.yaml",
    "Temp/live_replay_separation_v2.json",
    "Temp/formula_runtime_registry_v1.json",
}
REQUIRED_FILES = {
    "data_feed/AGENTS.md",
    "data_feed/README.md",
    "data_feed/package.json",
    "data_feed/gas_event_calendar.gs",
    "data_feed/runtime/active_artifact_manifest.yaml",
    "data_feed/Temp/final_decision_packet_active.json",
    "data_feed/Temp/operational_report.json",
    "data_feed/Temp/operational_report.md",
    "data_feed/Temp/release_dag_run_v1.json",
    "data_feed/Temp/pipeline_runtime_profile_v1.json",
}


def main() -> int:
    ap = argparse.ArgumentParser()
    ap.add_argument("--zip", required=True)
    args = ap.parse_args()
    zpath = Path(args.zip)
    with zipfile.ZipFile(zpath) as zf:
        names = set(zf.namelist())
    missing = sorted(REQUIRED_FILES - names)
    temp_noise = sorted(
        name for name in names
        if name.startswith("data_feed/Temp/") and name.replace("data_feed/", "") not in ALLOWED_TEMP_FILES
    )
    ok = not missing and not temp_noise
    payload = {
        "formula_id": "PACKAGING_POLICY_V2",
        "gate": "PASS" if ok else "FAIL",
        "missing_required_count": len(missing),
        "temp_noise_count": len(temp_noise),
        "missing_required": missing[:50],
        "temp_noise": temp_noise[:50],
    }
    print(json.dumps(payload, ensure_ascii=True, indent=2))
    return 0 if ok else 1


if __name__ == "__main__":
    raise SystemExit(main())
