from __future__ import annotations

import argparse
from pathlib import Path
from typing import Any

import yaml


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


def _load(path: Path) -> dict[str, Any]:
    if not path.exists():
        return {}
    payload = yaml.safe_load(path.read_text(encoding="utf-8"))
    return payload if isinstance(payload, dict) else {}


def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("--in", dest="input_dir", default="spec/formulas")
    parser.add_argument("--out", dest="out_path", default="spec/03_formulas/formula_registry.normalized.yaml")
    args = parser.parse_args()
    in_dir = ROOT / args.input_dir
    out_path = ROOT / args.out_path

    formulas: dict[str, Any] = {}
    for path in sorted(in_dir.glob("*.yaml")):
        if path.name == "manifest.yaml":
            continue
        doc = _load(path)
        domain_formulas = doc.get("formulas") if isinstance(doc.get("formulas"), dict) else {}
        for fid, row in domain_formulas.items():
            formulas[str(fid)] = row

    normalized = {
        "schema_version": "2026-06-07-formula-registry-normalized-v2",
        "source": str(in_dir),
        "formula_count": len(formulas),
        "formulas": [{"formula_id": fid, **(row if isinstance(row, dict) else {})} for fid, row in sorted(formulas.items())],
    }
    out_path.parent.mkdir(parents=True, exist_ok=True)
    out_path.write_text(yaml.safe_dump(normalized, sort_keys=False, allow_unicode=True), encoding="utf-8")
    print(yaml.safe_dump({"formula_count": len(formulas), "out": str(out_path)}, sort_keys=False, allow_unicode=True).strip())
    return 0


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

