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

import argparse
import json
from pathlib import Path

import yaml


ROOT = Path(__file__).resolve().parents[1]
REQUIRED_FIELDS = {
    "factor_id",
    "hypothesis",
    "market_regime_applicability",
    "horizon",
    "decay_half_life",
    "input_fields",
    "formula_id",
    "data_quality_requirements",
    "expected_edge_formula",
    "conflict_precedence",
    "position_sizing_impact",
    "exit_impact",
    "golden_cases",
    "shadow_start_date",
    "activation_threshold",
    "retirement_condition",
    "owner",
}


def main() -> int:
    ap = argparse.ArgumentParser()
    ap.add_argument("--taxonomy", default="spec/43_quant_factor_taxonomy.yaml")
    ap.add_argument("--template", default="suggest/factor_rfc_template.yaml")
    args = ap.parse_args()

    taxonomy = yaml.safe_load((ROOT / args.taxonomy).read_text(encoding="utf-8")) or {}
    template = yaml.safe_load((ROOT / args.template).read_text(encoding="utf-8")) or {}
    missing_taxonomy = [f for f in REQUIRED_FIELDS if f not in (taxonomy.get("required_lifecycle_fields") or [])]
    missing_template = [f for f in REQUIRED_FIELDS if f not in template]
    ok = not missing_taxonomy and not missing_template
    payload = {
        "formula_id": "FACTOR_CONTRACT_V1",
        "gate": "PASS" if ok else "FAIL",
        "missing_taxonomy_fields": missing_taxonomy,
        "missing_template_fields": missing_template,
    }
    out = ROOT / "Temp" / "factor_contract_v1.json"
    out.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(payload, ensure_ascii=False, indent=2))
    return 0 if ok else 1


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