"use client"; import type React from "react"; import { useState, useEffect } from "react"; import DoctorLayout from "@/components/doctor-layout"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Clock, Calendar, MapPin, Phone, User, X, RefreshCw } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { toast } from "sonner"; const APPOINTMENTS_STORAGE_KEY = "clinic-appointments"; // --- TIPAGEM DA CONSULTA SALVA NO LOCALSTORAGE --- // Reflete a estrutura salva pelo secretarypage.tsx interface LocalStorageAppointment { id: number; // ID único simples (timestamp) patientName: string; doctor: string; // Nome completo do médico (para filtrar) specialty: string; date: string; // Data no formato YYYY-MM-DD time: string; // Hora no formato HH:MM status: "agendada" | "confirmada" | "cancelada" | "realizada"; location: string; phone: string; } // --- SIMULAÇÃO DO MÉDICO LOGADO --- // **IMPORTANTE**: Em um ambiente real, este valor viria do seu sistema de autenticação. // Use um nome que corresponda a um médico que você cadastrou e usou para agendar. const LOGGED_IN_DOCTOR_NAME = "Dr. João Silva"; // <--- AJUSTE ESTE NOME PARA TESTAR // --- COMPONENTE PRINCIPAL --- export default function DoctorAppointmentsPage() { const [appointments, setAppointments] = useState([]); const [isLoading, setIsLoading] = useState(true); useEffect(() => { loadAppointments(); }, []); const loadAppointments = () => { setIsLoading(true); try { const storedAppointmentsRaw = localStorage.getItem(APPOINTMENTS_STORAGE_KEY); const allAppointments: LocalStorageAppointment[] = storedAppointmentsRaw ? JSON.parse(storedAppointmentsRaw) : []; // 1. FILTRAGEM CRÍTICA: Apenas as consultas para o médico logado const filteredAppointments = allAppointments.filter( (app) => app.doctor === LOGGED_IN_DOCTOR_NAME ); // 2. Ordena por Data e Hora filteredAppointments.sort((a, b) => { const dateTimeA = new Date(`${a.date}T${a.time}:00`); const dateTimeB = new Date(`${b.date}T${b.time}:00`); return dateTimeA.getTime() - dateTimeB.getTime(); }); setAppointments(filteredAppointments); toast.success("Agenda atualizada com sucesso!"); } catch (error) { console.error("Erro ao carregar a agenda do LocalStorage:", error); toast.error("Não foi possível carregar sua agenda."); } finally { setIsLoading(false); } }; // Função utilitária para mapear o status para a cor da Badge const getStatusVariant = (status: LocalStorageAppointment['status']) => { switch (status) { case "confirmada": case "agendada": return "default"; case "realizada": return "secondary"; case "cancelada": return "destructive"; default: return "outline"; } }; const handleCancel = (id: number) => { // Lógica para CANCELAR a consulta no LocalStorage const storedAppointmentsRaw = localStorage.getItem(APPOINTMENTS_STORAGE_KEY); const allAppointments: LocalStorageAppointment[] = storedAppointmentsRaw ? JSON.parse(storedAppointmentsRaw) : []; const updatedAppointments = allAppointments.map(app => app.id === id ? { ...app, status: "cancelada" as const } : app ); localStorage.setItem(APPOINTMENTS_STORAGE_KEY, JSON.stringify(updatedAppointments)); loadAppointments(); // Recarrega a lista filtrada toast.info(`Consulta cancelada com sucesso.`); }; const handleReSchedule = (id: number) => { // Aqui você navegaria para a tela de agendamento passando o ID para pré-preencher toast.info(`Reagendamento da Consulta ID: ${id}. Navegar para a página de agendamento.`); }; return (

Minhas Consultas

Agenda atual ({LOGGED_IN_DOCTOR_NAME}) e histórico de atendimentos

{isLoading ? (

Carregando a agenda...

) : appointments.length === 0 ? (

Nenhuma consulta agendada para você (Médico: {LOGGED_IN_DOCTOR_NAME}).

) : ( appointments.map((appointment) => { // Formatação de data e hora const showActions = appointment.status === "agendada" || appointment.status === "confirmada"; return ( {/* NOME DO PACIENTE */} {appointment.patientName} {/* STATUS DA CONSULTA */} {appointment.status} {/* COLUNA 1: Data e Hora */}
{new Date(appointment.date).toLocaleDateString("pt-BR", { timeZone: "UTC" })}
{appointment.time}
{/* COLUNA 2: Local e Contato */}
{appointment.location}
{/* Note: O telefone do paciente não está salvo no LocalStorage no seu código atual, usando um valor fixo */} {(appointment.phone || "(11) 9XXXX-YYYY")}
{/* COLUNA 3: Ações (Botões) */}
{showActions && (
)}
); }) )}
); }