import React, { useState, useEffect } from "react"; import { Calendar, Users, UserCheck, Clock, ArrowRight } from "lucide-react"; import { useNavigate } from "react-router-dom"; import { listPatients } from "../services/pacienteService"; import medicoService from "../services/medicoService"; import consultaService from "../services/consultaService"; import { MetricCard } from "../components/MetricCard"; import { i18n } from "../i18n"; import { telemetry } from "../services/telemetry"; const Home: React.FC = () => { const [stats, setStats] = useState({ totalPacientes: 0, totalMedicos: 0, consultasHoje: 0, consultasPendentes: 0, }); const [loading, setLoading] = useState(true); const [error, setError] = useState(false); const navigate = useNavigate(); useEffect(() => { fetchStats(); }, []); const fetchStats = async () => { try { setLoading(true); setError(false); const [pacientesResult, medicosResult, consultasResult] = await Promise.all([ listPatients().catch(() => ({ data: [] })), medicoService.listarMedicos().catch(() => ({ data: { data: [] } })), consultaService .listarConsultas() .catch(() => ({ data: { data: [] } })), ]); const hoje = new Date().toISOString().split("T")[0]; const consultas = consultasResult.data?.data || []; const consultasHoje = consultas.filter((consulta) => consulta.data_hora?.startsWith(hoje)) .length || 0; const consultasPendentes = consultas.filter( (consulta) => consulta.status === "agendada" || consulta.status === "confirmada" ).length || 0; const medicos = medicosResult.data?.data || []; setStats({ totalPacientes: pacientesResult.data?.length || 0, totalMedicos: medicos.length || 0, consultasHoje, consultasPendentes, }); } catch (err) { console.error("Erro ao carregar estatísticas:", err); setError(true); telemetry.trackError("stats_load_error", String(err)); } finally { setLoading(false); } }; const handleCTA = (action: string, destination: string) => { telemetry.trackCTA(action, destination); navigate(destination); }; return (
{/* Hero Section */}
{/* Decorative Pattern */}

{i18n.t("home.hero.title")}

{i18n.t("home.hero.subtitle")}

{/* CTAs */}
{/* Métricas */}
{/* Cards de Ação */}
handleCTA("Card Agendar", "/paciente")} /> handleCTA("Card Médico", "/login-medico")} /> handleCTA("Card Secretaria", "/login-secretaria")} />
); }; // Action Card Component interface ActionCardProps { icon: React.ComponentType<{ className?: string }>; iconColor: string; iconBgColor: string; title: string; description: string; ctaLabel: string; ctaAriaLabel: string; onAction: () => void; } const ActionCard: React.FC = ({ icon: Icon, iconBgColor, title, description, ctaLabel, ctaAriaLabel, onAction, }) => { return (

{title}

{description}

); }; export default Home;