from __future__ import annotations

import argparse
import json
from pathlib import Path
from typing import Any


ROOT = Path(__file__).resolve().parents[1]
# V2 is the current active artifact; fall back to V1 path if absent
_V2_PATH = ROOT / "Temp" / "final_execution_decision_v2.json"
_V1_PATH = ROOT / "Temp" / "final_execution_decision_v1.json"
DEFAULT_PATH = _V2_PATH if _V2_PATH.exists() else _V1_PATH


def _load(path: Path) -> dict[str, Any]:
    if not path.exists():
        return {}
    try:
        obj = json.loads(path.read_text(encoding="utf-8"))
    except Exception:
        return {}
    return obj if isinstance(obj, dict) else {}


def main() -> int:
    ap = argparse.ArgumentParser()
    ap.add_argument("--json", default=str(DEFAULT_PATH))
    args = ap.parse_args()

    path = Path(args.json)
    if not path.is_absolute():
        path = ROOT / path

    payload = _load(path)
    errors: list[str] = []

    if str(payload.get("formula_id") or "") not in {"FINAL_EXECUTION_DECISION_V1", "FINAL_EXECUTION_DECISION_V2"}:
        errors.append("formula_id mismatch")
    gate = str(payload.get("global_execution_gate") or "")
    if gate not in {"HTS_READY", "EXPLAIN_ONLY", "AUDIT_ONLY"}:
        errors.append(f"global_execution_gate={gate}")
    if not isinstance(payload.get("buy_allowed"), bool):
        errors.append("buy_allowed must be bool")
    if not isinstance(payload.get("sell_allowed"), bool):
        errors.append("sell_allowed must be bool")
    if not isinstance(payload.get("hts_order_count"), int):
        errors.append("hts_order_count must be int")
    if not isinstance(payload.get("reason_codes"), list):
        errors.append("reason_codes must be list")
    if not isinstance(payload.get("llm_allowed_actions"), list):
        errors.append("llm_allowed_actions must be list")

    if gate != "HTS_READY" and int(payload.get("hts_order_count") or 0) != 0:
        errors.append("non-HTS_READY decision must have hts_order_count=0")

    if errors:
        print("FINAL_EXECUTION_DECISION_V1_FAIL")
        for err in errors:
            print(f"  {err}")
        return 1

    print("FINAL_EXECUTION_DECISION_V1_OK")
    print(f"  global_execution_gate: {gate}")
    print(f"  hts_order_count: {int(payload.get('hts_order_count') or 0)}")
    return 0


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