'use client' import { useState } from 'react' import { useRouter } from 'next/navigation' import { FileUpload } from '@/components/incidents/file-upload' import type { IncidentType, MedicalStatus } from '@/lib/incidents/validate' const INCIDENT_TYPE_LABELS: Record = { injury: 'Injury / Medical', near_miss: 'Near Miss', hazard: 'Hazard / Unsafe Condition', asset_damage: 'Asset / Equipment Damage', environmental: 'Environmental Incident', security: 'Security Incident', fire: 'Fire / Emergency', } const MEDICAL_STATUS_LABELS: Record = { none: 'No treatment needed', first_aid: 'First aid only', medical_treatment: 'Medical treatment (non-LTI)', lti: 'Lost Time Injury (LTI)', } interface Props { zoneToken: string | null zoneName: string | null siteName: string | null } export function ReportForm({ zoneToken }: Props) { const router = useRouter() const [submitting, setSubmitting] = useState(false) const [error, setError] = useState(null) const [files, setFiles] = useState([]) const [form, setForm] = useState({ incident_type: '' as IncidentType | '', description: '', injury_involved: false, medical_status: '' as MedicalStatus | '', asset_involved: false, }) async function handleSubmit(e: React.FormEvent) { e.preventDefault() setError(null) setSubmitting(true) try { const fd = new FormData() if (zoneToken) fd.append('zone_token', zoneToken) fd.append('incident_type', form.incident_type) fd.append('description', form.description) fd.append('injury_involved', String(form.injury_involved)) fd.append('asset_involved', String(form.asset_involved)) if (form.injury_involved && form.medical_status) { fd.append('medical_status', form.medical_status) } files.forEach(f => fd.append('files', f)) const res = await fetch('/api/incidents', { method: 'POST', body: fd }) const data = await res.json() if (!res.ok) { setError(data.details ? data.details.join('. ') : data.error) return } router.push(`/report/success?ref=${data.reference_no}`) } catch { setError('Something went wrong. Please try again.') } finally { setSubmitting(false) } } return (
{error && (
{error}
)}