"use client" import { useState } from 'react' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Label } from '@/components/ui/label' import { Input } from '@/components/ui/input' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Calendar as CalendarComponent } from '@/components/ui/calendar' import { Calendar } from 'lucide-react' import { criarExcecao, DoctorExceptionCreate } from '@/lib/api' import { useToast } from '@/hooks/use-toast' export interface ExceptionFormProps { open: boolean onOpenChange: (open: boolean) => void doctorId?: string | null onSaved?: (saved: any) => void } export default function ExceptionForm({ open, onOpenChange, doctorId = null, onSaved }: ExceptionFormProps) { const [date, setDate] = useState('') const [startTime, setStartTime] = useState('') const [endTime, setEndTime] = useState('') const [kind, setKind] = useState<'bloqueio'|'liberacao'>('bloqueio') const [reason, setReason] = useState('') const [submitting, setSubmitting] = useState(false) const [showDatePicker, setShowDatePicker] = useState(false) const { toast } = useToast() async function handleSubmit(e?: React.FormEvent) { e?.preventDefault() if (!doctorId) { toast({ title: 'Erro', description: 'ID do médico não informado', variant: 'destructive' }) return } if (!date) { toast({ title: 'Erro', description: 'Data obrigatória', variant: 'destructive' }) return } setSubmitting(true) try { const payload: DoctorExceptionCreate = { doctor_id: String(doctorId), date: String(date), start_time: startTime ? `${startTime}:00` : undefined, end_time: endTime ? `${endTime}:00` : undefined, kind, reason: reason || undefined, } const saved = await criarExcecao(payload) toast({ title: 'Exceção criada', description: `${payload.date} • ${kind}`, variant: 'default' }) onSaved?.(saved) onOpenChange(false) } catch (err: any) { console.error('Erro ao criar exceção:', err) toast({ title: 'Erro', description: err?.message || String(err), variant: 'destructive' }) } finally { setSubmitting(false) } } return ( Criar exceção
{ try { const [y, m, d] = String(date).split('-'); return `${d}/${m}/${y}`; } catch (e) { return ''; } })() : ''} readOnly /> {showDatePicker && (
{ try { const [y, m, d] = String(date).split('-').map(Number); return new Date(y, m - 1, d); } catch (e) { return undefined; } })() : undefined} onSelect={(selectedDate) => { if (selectedDate) { const y = selectedDate.getFullYear(); const m = String(selectedDate.getMonth() + 1).padStart(2, '0'); const d = String(selectedDate.getDate()).padStart(2, '0'); const dateStr = `${y}-${m}-${d}`; setDate(dateStr); setShowDatePicker(false); } }} disabled={(checkDate) => { const today = new Date(); today.setHours(0, 0, 0, 0); return checkDate < today; }} />
)}
setStartTime(e.target.value)} />
setEndTime(e.target.value)} />
setReason(e.target.value)} />
) }