2025-10-18 21:23:27 -03:00

88 lines
2.8 KiB
TypeScript

"use client";
import { useRouter } from "next/navigation";
import { CalendarRegistrationForm } from "@/components/forms/calendar-registration-form";
import HeaderAgenda from "@/components/agenda/HeaderAgenda";
import FooterAgenda from "@/components/agenda/FooterAgenda";
import { useState } from "react";
import { criarAgendamento } from '@/lib/api';
import { toast } from '@/hooks/use-toast';
interface FormData {
patientName?: string;
cpf?: string;
rg?: string;
birthDate?: string;
phoneCode?: string;
phoneNumber?: string;
email?: string;
convenio?: string;
matricula?: string;
validade?: string;
documentos?: string;
professionalName?: string;
unit?: string;
appointmentDate?: string;
startTime?: string;
endTime?: string;
requestingProfessional?: string;
appointmentType?: string;
notes?: string;
}
export default function NovoAgendamentoPage() {
const router = useRouter();
const [formData, setFormData] = useState<FormData>({});
const handleFormChange = (data: FormData) => {
setFormData(data);
};
const handleSave = () => {
(async () => {
try {
// basic validation
if (!formData.patientId && !(formData as any).patient_id) throw new Error('Patient ID é obrigatório');
if (!formData.doctorId && !(formData as any).doctor_id) throw new Error('Doctor ID é obrigatório');
if (!formData.appointmentDate) throw new Error('Data é obrigatória');
if (!formData.startTime) throw new Error('Horário de início é obrigatório');
const payload: any = {
patient_id: formData.patientId || (formData as any).patient_id,
doctor_id: formData.doctorId || (formData as any).doctor_id,
scheduled_at: new Date(`${formData.appointmentDate}T${formData.startTime}`).toISOString(),
duration_minutes: formData.duration_minutes ?? 30,
appointment_type: formData.appointmentType ?? 'presencial',
chief_complaint: formData.chief_complaint ?? null,
patient_notes: formData.patient_notes ?? null,
insurance_provider: formData.insurance_provider ?? null,
};
await criarAgendamento(payload);
// success
try { toast({ title: 'Agendamento criado', description: 'O agendamento foi criado com sucesso.' }); } catch {}
router.push('/consultas');
} catch (err: any) {
alert(err?.message ?? String(err));
}
})();
};
const handleCancel = () => {
router.push("/calendar");
};
return (
<div className="min-h-screen flex flex-col bg-background">
<HeaderAgenda />
<main className="flex-1 mx-auto w-full max-w-7xl px-8 py-8">
<CalendarRegistrationForm
formData={formData}
onFormChange={handleFormChange}
createMode
/>
</main>
<FooterAgenda onSave={handleSave} onCancel={handleCancel} />
</div>
);
}