"""Health check router.

A lightweight ``GET /api/health`` endpoint that verifies the application
is running and can serve requests.  Also reports the cached fail2ban liveness
state so monitoring tools and Docker health checks can observe daemon status
without probing the socket directly.
"""

from fastapi import APIRouter, Request
from fastapi.responses import JSONResponse

from app.models.server import ServerStatus

router: APIRouter = APIRouter(prefix="/api", tags=["Health"])


@router.get("/health", summary="Application health check")
async def health_check(request: Request) -> JSONResponse:
    """Return 200 with application and fail2ban status.

    HTTP 200 is always returned so Docker health checks do not restart the
    backend container when fail2ban is temporarily offline.  The
    ``fail2ban`` field in the body indicates the daemon's current state.

    Args:
        request: FastAPI request (used to read cached server status).

    Returns:
        A JSON object with ``{"status": "ok", "fail2ban": "online"|"offline"}``.
    """
    cached: ServerStatus = getattr(
        request.app.state, "server_status", ServerStatus(online=False)
    )
    return JSONResponse(content={
        "status": "ok",
        "fail2ban": "online" if cached.online else "offline",
    })
