#!/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():
    queue = {
        "items": [
            {"id": "rev-1", "risk": "privacy", "age_min": 12, "owner": "guardia"},
            {"id": "rev-2", "risk": "external_effect", "age_min": 31, "owner": "responsable"},
        ],
        "slo_minutes": 45,
        "degraded_mode": "disable_persistent_actions",
    }
    checks = [
        ok("cola con owner", all(item["owner"] for item in queue["items"]), "No hay revisión anónima."),
        ok("SLO cumple", max(item["age_min"] for item in queue["items"]) <= queue["slo_minutes"], "La revisión tiene tiempo objetivo."),
        ok("modo degradado", bool(queue["degraded_mode"]), "Si la cola cae, el sistema sabe qué apagar."),
        ok("riesgos clasificados", {i["risk"] for i in queue["items"]} == {"privacy", "external_effect"}, "La revisión depende del riesgo."),
    ]
    return report("Cola de revisión humana", queue, checks, "La revisión humana queda operable: owner, SLO, riesgo y modo degradado están escritos.")


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 / "handoff_queue_report.json").write_text(json.dumps(rep, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
        lines = [f"# Decisi\u00f3n C08: {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 / "handoff_queue_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()
