from __future__ import annotations

from html import escape

from fastapi.responses import HTMLResponse, JSONResponse
from starlette.status import HTTP_501_NOT_IMPLEMENTED


def capability_disabled_payload(capability: str) -> dict[str, object]:
    normalized_capability = str(capability or "").strip().lower()
    label = normalized_capability.upper() or "CAPACIDAD"
    return {
        "code": "CAPABILITY_DISABLED",
        "detail": f"La capacidad {label} está deshabilitada.",
        "capability": normalized_capability,
        "enabled": False,
    }


def capability_disabled_json_response(capability: str) -> JSONResponse:
    return JSONResponse(
        status_code=HTTP_501_NOT_IMPLEMENTED,
        content=capability_disabled_payload(capability),
    )


def capability_disabled_html_response(capability: str) -> HTMLResponse:
    payload = capability_disabled_payload(capability)
    capability_label = escape(str(payload["capability"]).upper())
    detail = escape(str(payload["detail"]))
    code = escape(str(payload["code"]))
    return HTMLResponse(
        status_code=HTTP_501_NOT_IMPLEMENTED,
        content=(
            "<!doctype html>"
            '<html lang="es"><head><meta charset="utf-8">'
            f"<title>{capability_label} no disponible</title></head>"
            '<body><main role="main">'
            f'<h1>{capability_label} no disponible</h1><p>{detail}</p>'
            f'<p data-code="{code}" data-capability="{capability_label.lower()}" data-enabled="false">'
            "La operación no fue ejecutada.</p>"
            "</main></body></html>"
        ),
    )
