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")
    args = ap.parse_args()
    path = ROOT / args.taxonomy if not Path(args.taxonomy).is_absolute() else Path(args.taxonomy)
    data = yaml.safe_load(path.read_text(encoding="utf-8")) if path.exists() else {}
    lifecycle_fields = data.get("required_lifecycle_fields") if isinstance(data, dict) else []
    if not isinstance(lifecycle_fields, list):
        lifecycle_fields = []
    missing = [field for field in REQUIRED_FIELDS if field not in lifecycle_fields]
    ok = not missing
    payload = {
        "formula_id": "FACTOR_LIFECYCLE_V1",
        "gate": "PASS" if ok else "FAIL",
        "missing_fields": missing,
        "required_field_count": len(REQUIRED_FIELDS),
    }
    out = ROOT / "Temp" / "factor_lifecycle_v1.json"
    out.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(payload, ensure_ascii=True, indent=2))
    return 0 if ok else 1


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