"""Проверка живости сервиса и доступности движка контейнеров.

Автор: Сергей Антропов
Сайт: https://devops.org.ru
"""

from __future__ import annotations

import asyncio
import logging
import shutil

from fastapi import APIRouter

from core.cluster_lifecycle import container_engine_ping

logger = logging.getLogger("kind_k8s.api.health")

router = APIRouter(tags=["health"])


@router.get("/health", summary="Состояние сервиса и среды")
async def health() -> dict[str, object]:
    """
    Проверка: процесс отвечает, в PATH есть kind/kubectl, доступен Docker/Podman API (``info``).

    Без рабочего сокета создание kind-кластеров из UI невозможно.
    """
    kind_ok = shutil.which("kind") is not None
    kubectl_ok = shutil.which("kubectl") is not None

    engine_ok, engine_msg, cli = await asyncio.to_thread(container_engine_ping)

    logger.debug(
        "health: kind=%s kubectl=%s engine=%s cli=%s",
        kind_ok,
        kubectl_ok,
        engine_ok,
        cli,
    )

    overall = "ok" if (kind_ok and kubectl_ok and engine_ok) else "degraded"
    return {
        "status": overall,
        "kind_in_path": kind_ok,
        "kubectl_in_path": kubectl_ok,
        "container_cli": cli,
        "container_engine_ok": engine_ok,
        "container_engine_detail": engine_msg if not engine_ok else None,
    }
