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

import argparse
import yaml
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]

def main() -> int:
    ap = argparse.ArgumentParser()
    ap.add_argument("--registry", default="spec/13_formula_registry.yaml")
    ap.add_argument("--out", default="spec/factor_lifecycle_registry.yaml")
    args = ap.parse_args()

    reg_path = ROOT / args.registry
    out_path = ROOT / args.out

    if not reg_path.exists():
        print(f"Registry not found: {reg_path}")
        return 1

    try:
        data = yaml.safe_load(reg_path.read_text(encoding="utf-8"))
    except Exception as e:
        print(f"Failed to parse registry: {e}")
        return 1

    formulas = data.get("formula_registry", {}).get("formulas", {})
    
    factors = []
    for fid, formula in formulas.items():
        # Build basic factor structure for lifecycle management
        factor = {
            "factor_id": fid,
            "formula_id": fid,
            "hypothesis": formula.get("notes", "Expert prior hypothesis for quant edge"),
            "owner": formula.get("owner", "quant_architect"),
            "promotion_gate": "draft",
            "required_data": formula.get("inputs", []),
            "position_sizing_impact": "diagnostic",
            "exit_impact": "none",
            "golden_cases": [],
            "retirement_condition": "drawdown_limit_breach"
        }
        factors.append(factor)

    lifecycle_registry = {
        "schema_version": "factor_lifecycle_registry.v1",
        "description": "Lifecycle states (draft, shadow, candidate, active, retired) for all registered quant factors",
        "factors": factors
    }

    out_path.parent.mkdir(parents=True, exist_ok=True)
    out_path.write_text(yaml.safe_dump(lifecycle_registry, sort_keys=False, allow_unicode=True), encoding="utf-8")
    print(f"Successfully generated lifecycle registry: {out_path}")
    return 0

if __name__ == "__main__":
    import sys
    sys.exit(main())
