#!/usr/bin/env python3
import argparse
import json
from pathlib import Path


def ok(name, passed, detail):
    return {"name": name, "passed": bool(passed), "detail": detail}


def status(checks):
    return "valid" if all(item["passed"] for item in checks) else "invalid"


def report(title, artifact, checks, decision):
    return {"title": title, "artifact": artifact, "checks": checks, "status": status(checks), "decision": decision}


def build():
    incident = {
        "symptoms": ["latency_p95_high", "groundedness_drop"],
        "mitigations": ["route_to_safe_model", "lower_canary", "freeze_release"],
        "postmortem": {"impact": "20 min degradados", "owner": "equipo-ia", "actions": 3},
        "regression_case": {"id": "reg-incident-001", "added_to_evalops": True},
    }
    checks = [
        ok("síntomas concretos", len(incident["symptoms"]) >= 2, "No se diagnostica con sensaciones."),
        ok("mitigación ejecutable", "freeze_release" in incident["mitigations"], "Puede detener cambios."),
        ok("postmortem con acciones", incident["postmortem"]["actions"] >= 2, "La mejora queda asignada."),
        ok("caso de regresión", incident["regression_case"]["added_to_evalops"], "El fallo entra en EvalOps."),
    ]
    return report("Incidencia a mejora continua", incident, checks, "La incidencia produce mitigación, postmortem y un caso de regresión; no se queda en relato.")


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--write", action="store_true")
    parser.add_argument("--fail-on-invalid", action="store_true")
    args = parser.parse_args()
    rep = build()
    print(json.dumps({"status": rep["status"]}, indent=2, ensure_ascii=False))
    if args.write:
        out = Path("output")
        out.mkdir(parents=True, exist_ok=True)
        (out / "incident_review_report.json").write_text(json.dumps(rep, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
        lines = [f"# Decisi\u00f3n C09: {rep['title']}", "", f"Estado: `{rep['status']}`.", "", "## Evidencias", ""]
        for item in rep["checks"]:
            mark = "OK" if item["passed"] else "FALLO"
            lines.append(f"- {mark}: {item['name']}. {item['detail']}")
        lines.extend(["", "## Decisi\u00f3n", "", rep["decision"], ""])
        (out / "incident_review_decision.md").write_text("\n".join(lines), encoding="utf-8")
    if args.fail_on_invalid and rep["status"] != "valid":
        raise SystemExit("Pr\u00e1ctica inv\u00e1lida")


if __name__ == "__main__":
    main()
