import { useEffect, useState } from "react"; import api from "../Api"; import { ServerTypeLabels, type ServersType } from "../types/enums"; import { Code, Database, FlaskConical, Server } from "lucide-icons-react"; interface ServerCount { type: ServersType; total: number; } export const ServerCardMetrics = () => { const [counts, setCounts] = useState([]); const [error, setError] = useState(null); useEffect(() => { const fetchCounts = async () => { try { const { data } = await api.get>("/api/servers/type"); const normalized = Object.entries(data).map(([type, total]) => ({ type: type as ServersType, total, })); setCounts(normalized); } catch (err: any) { const message = err?.response?.data?.message || "Falha ao carregar o total de servidores."; setError(message); } }; fetchCounts(); }, []); if (error) { return
{error}
; } if (counts.length === 0) { return
Carregando métricas...
; } const handleCardIcon = (type: ServersType) => { const iconProps = { size: 32, strokeWidth: 1.5 }; switch (type) { case "DATABASE": return ; case "HOMOLOGATION": return ; case "PRODUCTION": return ; default: return ; } }; const formatTotal = (value: number) => value.toLocaleString("pt-BR"); return (
{counts.map(({ type, total }) => (
{handleCardIcon(type)}

{formatTotal(total)}

{ServerTypeLabels[type]}

))}
); }; const Styles = { grid: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3", card: "flex items-center gap-4 rounded-xl border border-cardBorder bg-gradient-to-br from-white/90 to-card p-5 shadow-sm", iconWrapper: "flex h-14 w-14 items-center justify-center rounded-lg border border-accent/20 bg-accent/10 text-accent", textGroup: "flex flex-col", label: "text-xs font-medium uppercase tracking-wide text-text-secondary", value: "text-3xl font-semibold text-text leading-tight", placeholder: "p-4 rounded-lg border border-cardBorder bg-card text-text-secondary text-sm", error: "p-4 rounded-lg border border-red-200 bg-red-50 text-red-600 text-sm", };