"use client"; import SecretaryLayout from "@/components/secretary-layout"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Calendar, Clock, User, Plus } from "lucide-react"; import Link from "next/link"; import React, { useState, useEffect } from "react"; import { patientsService } from "@/services/pacientesApi"; import { appointmentsService } from "@/services/agendamentosApi"; export default function SecretaryDashboard() { // Estados const [patients, setPatients] = useState([]); const [loadingPatients, setLoadingPatients] = useState(true); const [firstConfirmed, setFirstConfirmed] = useState(null); const [nextAgendada, setNextAgendada] = useState(null); const [loadingAppointments, setLoadingAppointments] = useState(true); // 🔹 Buscar pacientes useEffect(() => { async function fetchPatients() { try { const data = await patientsService.list(); if (Array.isArray(data)) { setPatients(data.slice(0, 3)); } } catch (error) { console.error("Erro ao carregar pacientes:", error); } finally { setLoadingPatients(false); } } fetchPatients(); }, []); // 🔹 Buscar consultas (confirmadas + 1ª do mês) useEffect(() => { async function fetchAppointments() { try { const hoje = new Date(); const inicioMes = new Date(hoje.getFullYear(), hoje.getMonth(), 1); const fimMes = new Date(hoje.getFullYear(), hoje.getMonth() + 1, 0); // Mesmo parâmetro de ordenação da página /secretary/appointments const queryParams = "order=scheduled_at.desc"; const data = await appointmentsService.search_appointment(queryParams); if (!Array.isArray(data) || data.length === 0) { setFirstConfirmed(null); setNextAgendada(null); return; } // 🩵 1️⃣ Consultas confirmadas (para o card “Próxima Consulta Confirmada”) const confirmadas = data.filter((apt: any) => { const dataConsulta = new Date(apt.scheduled_at || apt.date); return apt.status === "confirmed" && dataConsulta >= hoje; }); confirmadas.sort( (a: any, b: any) => new Date(a.scheduled_at || a.date).getTime() - new Date(b.scheduled_at || b.date).getTime() ); setFirstConfirmed(confirmadas[0] || null); // 💙 2️⃣ Consultas deste mês — pegar sempre a 1ª (mais próxima) const consultasMes = data.filter((apt: any) => { const dataConsulta = new Date(apt.scheduled_at); return dataConsulta >= inicioMes && dataConsulta <= fimMes; }); if (consultasMes.length > 0) { consultasMes.sort( (a: any, b: any) => new Date(a.scheduled_at).getTime() - new Date(b.scheduled_at).getTime() ); setNextAgendada(consultasMes[0]); } else { setNextAgendada(null); } } catch (error) { console.error("Erro ao carregar consultas:", error); } finally { setLoadingAppointments(false); } } fetchAppointments(); }, []); return (
{/* Cabeçalho */}

Dashboard

Bem-vindo ao seu portal de consultas médicas

{/* Cards principais */}
{/* Próxima Consulta Confirmada */} Próxima Consulta Confirmada {loadingAppointments ? (
Carregando próxima consulta...
) : firstConfirmed ? ( <>
{new Date( firstConfirmed.scheduled_at || firstConfirmed.date ).toLocaleDateString("pt-BR")}

{firstConfirmed.doctor_name ? `Dr(a). ${firstConfirmed.doctor_name}` : "Médico não informado"}{" "} -{" "} {new Date( firstConfirmed.scheduled_at ).toLocaleTimeString("pt-BR", { hour: "2-digit", minute: "2-digit", })}

) : (
Nenhuma consulta confirmada encontrada
)}
{/* Consultas Este Mês */} Consultas Este Mês {loadingAppointments ? (
Carregando consultas...
) : nextAgendada ? ( <>
{new Date( nextAgendada.scheduled_at ).toLocaleDateString("pt-BR", { day: "2-digit", month: "2-digit", year: "numeric", })}{" "} às{" "} {new Date( nextAgendada.scheduled_at ).toLocaleTimeString("pt-BR", { hour: "2-digit", minute: "2-digit", })}

{nextAgendada.doctor_name ? `Dr(a). ${nextAgendada.doctor_name}` : "Médico não informado"}

{nextAgendada.patient_name ? `Paciente: ${nextAgendada.patient_name}` : ""}

) : (
Nenhuma consulta agendada neste mês
)}
{/* Perfil */} Perfil
100%

Dados completos

{/* Cards Secundários */}
{/* Ações rápidas */} Ações Rápidas Acesse rapidamente as principais funcionalidades {/* Pacientes */} Pacientes Últimos pacientes cadastrados {loadingPatients ? (

Carregando pacientes...

) : patients.length === 0 ? (

Nenhum paciente cadastrado.

) : (
{patients.map((patient, index) => (

{patient.full_name || "Sem nome"}

{patient.phone_mobile || patient.phone1 || "Sem telefone"}

{patient.convenio || "Particular"}

))}
)}
); }