from __future__ import annotations

import json
from pathlib import Path

from refactor_master_helpers import ROOT, load_json


def main() -> int:
    policy = load_json(ROOT / "Temp" / "rule_lifecycle_policy.json")
    errors: list[str] = []
    if not policy:
        errors.append("rule_lifecycle_policy.json missing or invalid")

    summary = policy.get("summary") if isinstance(policy, dict) else {}
    rows = policy.get("rule_lifecycle_rows") if isinstance(policy, dict) else []
    if not isinstance(summary, dict):
        errors.append("summary must be object")
        summary = {}
    if not isinstance(rows, list):
        errors.append("rule_lifecycle_rows must be list")
        rows = []

    if int(summary.get("retired_rule_active_count") or 0) != 0:
        errors.append("retired_rule_active_count must be 0")
    if not bool(summary.get("active_rule_has_lifecycle_status")):
        errors.append("active_rule_has_lifecycle_status must be true")
    if int(summary.get("t20_evaluated_count") or 0) < 0:
        errors.append("t20_evaluated_count invalid")

    for idx, row in enumerate(rows):
        if not isinstance(row, dict):
            errors.append(f"row[{idx}] must be object")
            continue
        if not str(row.get("rule_key") or "").strip():
            errors.append(f"row[{idx}].rule_key missing")
        if not str(row.get("policy_action") or "").strip():
            errors.append(f"row[{idx}].policy_action missing")
        if not str(row.get("rule_state") or "").strip():
            errors.append(f"row[{idx}].rule_state missing")

    result = {
        "formula_id": "RULE_LIFECYCLE_STRICT_V1",
        "row_count": len(rows),
        "retired_rule_active_count": int(summary.get("retired_rule_active_count") or 0),
        "active_rule_has_lifecycle_status": bool(summary.get("active_rule_has_lifecycle_status")),
        "gate": "PASS" if not errors else "FAIL",
        "errors": errors,
    }
    out = ROOT / "Temp" / "rule_lifecycle_strict_v1.json"
    out.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(result, ensure_ascii=False, indent=2))
    return 0 if not errors else 1


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