import { Activity, WifiOff } from "lucide-react"; import { useEffect, useState } from "react"; import { cn } from "../lib/utils"; import { getBackendStatus, type BackendHealthResponse } from "../services/statusService"; type LoadState = "loading" | "online" | "offline"; function extractBackendVersion(payload: BackendHealthResponse | null) { const versionCheck = payload?.checks?.find((check) => check.name === "backend-version"); const version = versionCheck?.data?.version; return typeof version === "string" ? version : "unknown"; } export function SystemStatusBadge() { const [backendStatus, setBackendStatus] = useState("loading"); const [backendVersion, setBackendVersion] = useState("..."); const [isPinnedOpen, setIsPinnedOpen] = useState(false); const [isHovered, setIsHovered] = useState(false); useEffect(() => { let active = true; async function loadStatus() { try { const response = await getBackendStatus(); if (!active) return; setBackendStatus(response.status === "UP" ? "online" : "offline"); setBackendVersion(extractBackendVersion(response)); } catch { if (!active) return; setBackendStatus("offline"); setBackendVersion("indisponivel"); } } void loadStatus(); const intervalId = window.setInterval(() => { void loadStatus(); }, 30000); return () => { active = false; window.clearInterval(intervalId); }; }, []); const frontendVersion = import.meta.env.VITE_APP_VERSION; const isOnline = backendStatus === "online"; const isExpanded = isHovered || isPinnedOpen; return (
setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} >
Sistema {backendStatus === "loading" ? "Verificando" : isOnline ? "Online" : "Offline"}
API {backendVersion} • WEB {frontendVersion}
); }