#!/usr/bin/env python3
import json, sys, tempfile
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent))
from identity_engine import IdentityEngine

def _make_fixture(identity_data, contract_content="MICO-JDEQ CONTRACT v1.0\n"):
    temp_dir = Path(tempfile.mkdtemp())
    config_dir = temp_dir / "02_CAPABILITY" / "identity" / "config"
    contract_dir = temp_dir / "01_GOVERNANCE"
    evidence_dir = temp_dir / "05_EVIDENCE"
    config_dir.mkdir(parents=True, exist_ok=True)
    contract_dir.mkdir(parents=True, exist_ok=True)
    evidence_dir.mkdir(parents=True, exist_ok=True)
    config_path = config_dir / "identity.json"
    with open(config_path, "w", encoding="utf-8") as f: json.dump(identity_data, f, indent=2)
    contract_path = contract_dir / "contract.md"
    contract_path.write_text(contract_content, encoding="utf-8")
    return config_path, contract_path, evidence_dir

def _run_scenario(identity_data):
    config_path, contract_path, evidence_dir = _make_fixture(identity_data)
    engine = IdentityEngine(config_path, contract_path, evidence_dir)
    return engine.run()

def scenario_a():
    identity = {
        "system_name": "MICO-JDEQ", "architecture_version": "M2M-1.0",
        "node_id": "Z83-MASTER", "node_role": "CONTROL_CENTER",
        "owner": "Human Authority", "ssot_revision": "SSOT-001",
        "policy_revision": "POL-001"
    }
    out = _run_scenario(identity)
    assert out["status"] == "VERIFIED"
    assert out["validity_score"] == 100
    assert out["hard_gate"]["gate_passed"] is True

def scenario_b():
    identity = {
        "system_name": "MICO-JDEQ", "architecture_version": "M2M-1.0",
        "node_id": "PC-I5-WORKER", "node_role": "HEAVY_WORKER",
        "owner": "Human Authority"
    }
    out = _run_scenario(identity)
    assert out["status"] == "PARTIAL"
    assert out["validity_score"] == 82
    assert out["hard_gate"]["gate_passed"] is True

def scenario_c():
    identity = {
        "system_name": "MICO-JDEQ", "architecture_version": "M2M-1.0",
        "node_id": "x", "node_role": "EDGE_BACKUP",
        "owner": "Human Authority", "ssot_revision": "SSOT-003",
        "policy_revision": "POL-003"
    }
    out = _run_scenario(identity)
    assert out["status"] == "NOT_VERIFIED"
    assert out["hard_gate"]["gate_passed"] is False
    assert out["validity_score"] == 86

if __name__ == "__main__":
    scenario_a(); scenario_b(); scenario_c()
    print("ALL TESTS PASSED")
