// Caminho: app/context/AppointmentsContext.tsx (Completo e Corrigido) "use client"; import React, { createContext, useContext, useState, useEffect, ReactNode, useCallback } from 'react'; import { agendamentosApi, Appointment, CreateAppointmentData } from '@/services/agendamentosApi'; import { usuariosApi, User } from '@/services/usuariosApi'; import { toast } from "sonner"; // As definições de componentes de UI foram REMOVIDAS deste arquivo. // Elas pertencem aos arquivos que as utilizam, como `dashboard/page.tsx`. export interface AppointmentsContextType { appointments: Appointment[]; isLoading: boolean; error: string | null; fetchAppointments: () => Promise; addAppointment: (appointmentData: CreateAppointmentData) => Promise; updateAppointment: (appointmentId: string, updatedData: Partial>) => Promise; } const AppointmentsContext = createContext(undefined); export function AppointmentsProvider({ children }: { children: ReactNode }) { const [appointments, setAppointments] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const fetchAppointments = useCallback(async () => { setIsLoading(true); setError(null); try { const user = await usuariosApi.getCurrentUser(); if (user?.id) { const data = await agendamentosApi.listByPatient(user.id); setAppointments(data || []); } else { setAppointments([]); } } catch (err) { console.error("Erro ao buscar agendamentos:", err); setError("Não foi possível carregar os agendamentos."); setAppointments([]); } finally { setIsLoading(false); } }, []); useEffect(() => { fetchAppointments(); }, [fetchAppointments]); const addAppointment = async (appointmentData: CreateAppointmentData) => { try { await agendamentosApi.create(appointmentData); await fetchAppointments(); } catch (err) { console.error("Erro ao adicionar agendamento:", err); setError("Falha ao criar o novo agendamento. Tente novamente."); throw err; } }; const updateAppointment = async (appointmentId: string, updatedData: Partial>) => { try { toast.warning("Funcionalidade indisponível.", { description: "A API não suporta a atualização de agendamentos." }); } catch (err) { console.error("Erro ao tentar atualizar agendamento:", err); setError("Falha ao atualizar o agendamento. Tente novamente."); throw err; } }; const value = { appointments, isLoading, error, fetchAppointments, addAppointment, updateAppointment, }; return ( {children} ); } export function useAppointments() { const context = useContext(AppointmentsContext); if (context === undefined) { throw new Error('useAppointments deve ser usado dentro de um AppointmentsProvider'); } return context; }