#!/usr/bin/env python3
"""
CAIN-42 Epoch 6: Public Evidence Bundle Verifier CLI
====================================================
Section 28: Public Verification Command.

Usage:
    python3 cain_verify_public.py <BUNDLE_PATH.json>

Outputs strict, uncompromised verification status:
    VERIFIED
    FAILED
    UNVERIFIED
    INCOMPLETE
"""

import json
import os
import sys
from pathlib import Path

# Add platform-gateway to sys.path for cleanroom verifier if not already present
GATEWAY_DIR = Path(__file__).parent / "platform-gateway"
if str(GATEWAY_DIR) not in sys.path:
    sys.path.insert(0, str(GATEWAY_DIR))

from cain_epoch6_cleanroom_verifier import Epoch6CleanRoomVerifier, Epoch6CleanRoomVerdict

CANONICAL_CONSTITUTION_HASH = "ab588c90f93da85368d476d4368f4e03ce71c6cbf3a467c9931d0a705134f1b5"


def main():
    if len(sys.argv) < 2:
        print("Usage: python3 cain_verify_public.py <BUNDLE_PATH.json>", file=sys.stderr)
        print("Status: INCOMPLETE")
        sys.exit(2)

    bundle_path = Path(sys.argv[1])
    if not bundle_path.exists():
        print(f"Error: bundle file {bundle_path} does not exist", file=sys.stderr)
        print("Status: FAILED")
        sys.exit(1)

    try:
        with open(bundle_path, "r", encoding="utf-8") as f:
            bundle_data = json.load(f)
    except Exception as e:
        print(f"Error reading bundle JSON: {e}", file=sys.stderr)
        print("Status: FAILED")
        sys.exit(1)

    verifier = Epoch6CleanRoomVerifier(expected_constitution_hash=CANONICAL_CONSTITUTION_HASH, quorum_threshold=3)
    verdict, diagnostics = verifier.verify_master_bundle(bundle_data)

    print("=================================================================")
    print("        CAIN-42 EPOCH 6 INDEPENDENT CLEAN-ROOM VERIFIER          ")
    print("=================================================================")
    print(f"Bundle File:         {bundle_path.name}")
    print(f"Constitution Hash:   {CANONICAL_CONSTITUTION_HASH}")
    print(f"Checks Evaluated:    {diagnostics.get('checks_evaluated', 0)}")
    print(f"Checks Passed:       {diagnostics.get('checks_passed', 0)}")
    if diagnostics.get("unverified_items"):
        print(f"Unverified Items:    {len(diagnostics['unverified_items'])}")
        for item in diagnostics["unverified_items"]:
            print(f"  - {item}")
    if diagnostics.get("failed_items"):
        print(f"Failed Items:        {len(diagnostics['failed_items'])}")
        for item in diagnostics["failed_items"]:
            print(f"  - {item}")
    print("-----------------------------------------------------------------")
    print(f"FINAL VERDICT:       {verdict}")
    print("=================================================================")

    if verdict == Epoch6CleanRoomVerdict.VERIFIED:
        sys.exit(0)
    elif verdict == Epoch6CleanRoomVerdict.UNVERIFIED:
        sys.exit(3)
    elif verdict == Epoch6CleanRoomVerdict.INCOMPLETE:
        sys.exit(2)
    else:
        sys.exit(1)


if __name__ == "__main__":
    main()
