import { useState } from 'react'; import { ArrowLeft, ChevronRight, Camera, X, Check, Minus, Plus } from 'lucide-react'; interface Zone { name: string; defaultDrippers: number; } interface IrrigationCheckData { zoneName: string; drippersTotal: number; drippersWorking: number; drippersFailed: string[]; waterFlow: boolean; nutrientsMixed: boolean; scheduleActive: boolean; photoUrl?: string; issues?: string; } interface IrrigationChecklistProps { onComplete: (checks: IrrigationCheckData[]) => void; onBack: () => void; isPhotoRequired: boolean; } export default function IrrigationChecklist({ onComplete, onBack, isPhotoRequired }: IrrigationChecklistProps) { const zones: Zone[] = [ { name: 'Veg Upstairs', defaultDrippers: 48 }, { name: 'Veg Downstairs', defaultDrippers: 48 }, { name: 'Flower Upstairs', defaultDrippers: 64 }, { name: 'Flower Downstairs', defaultDrippers: 64 }, ]; const [checks, setChecks] = useState>(new Map()); const [currentZoneIndex, setCurrentZoneIndex] = useState(0); const [drippersWorking, setDrippersWorking] = useState(zones[0].defaultDrippers); const [waterFlow, setWaterFlow] = useState(true); const [nutrientsMixed, setNutrientsMixed] = useState(true); const [scheduleActive, setScheduleActive] = useState(true); const [issues, setIssues] = useState(''); const [photo, setPhoto] = useState(null); const currentZone = zones[currentZoneIndex]; const isLastZone = currentZoneIndex === zones.length - 1; const drippersFailed = currentZone.defaultDrippers - drippersWorking; const allGood = waterFlow && nutrientsMixed && scheduleActive && drippersFailed === 0; const handleNext = () => { if (isPhotoRequired && !photo) { alert('Photo is required for this step.'); return; } const checkData: IrrigationCheckData = { zoneName: currentZone.name, drippersTotal: currentZone.defaultDrippers, drippersWorking, drippersFailed: drippersFailed > 0 ? [`${drippersFailed} drippers`] : [], waterFlow, nutrientsMixed, scheduleActive, issues: issues || undefined, photoUrl: photo || undefined }; const newChecks = new Map(checks); newChecks.set(currentZone.name, checkData); setChecks(newChecks); if (isLastZone) { onComplete(Array.from(newChecks.values())); } else { const nextZone = zones[currentZoneIndex + 1]; setCurrentZoneIndex(currentZoneIndex + 1); setDrippersWorking(nextZone.defaultDrippers); setWaterFlow(true); setNutrientsMixed(true); setScheduleActive(true); setIssues(''); setPhoto(null); } }; return (
{/* Header */}

Zone {currentZoneIndex + 1}/{zones.length}

{currentZone.name}

{/* Progress */}
{zones.map((_, i) => (
))}
{/* Drippers Counter */}
Drippers {drippersFailed > 0 && ( {drippersFailed} failed )}
{drippersWorking}
of {currentZone.defaultDrippers}
{/* Status Toggles - compact */}
{/* Issues input - only when problems */} {!allGood && (
setIssues(e.target.value)} placeholder="Describe issues..." className="input w-full text-sm" />
)} {/* Photo */} {(isPhotoRequired || !allGood) && (
{ if (e.target.files?.[0]) setPhoto(URL.createObjectURL(e.target.files[0])); }} /> {photo ? (
Preview
) : ( )}
)} {/* Action */}
); } function StatusRow({ label, value, onChange }: { label: string; value: boolean; onChange: (v: boolean) => void }) { return ( ); }