import { useState } from 'react'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '../ui/dialog'; import { Button } from '../ui/button'; import { Input } from '../ui/input'; import { Label } from '../ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select'; import { Slider } from '../ui/slider'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '../ui/tabs'; import { api } from '../../lib/api'; import { layoutApi } from '../../lib/layoutApi'; import { Loader2, Wand2, Box, Layers, Grid } from 'lucide-react'; interface RoomLayoutWizardProps { isOpen: boolean; onClose: () => void; onSuccess: () => void; floorId: string; } export function RoomLayoutWizard({ isOpen, onClose, onSuccess, floorId }: RoomLayoutWizardProps) { const [step, setStep] = useState(1); // 1: Basics, 2: Layout, 3: Capacity const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ name: '', type: 'FLOWER', setupType: 'RACK', // RACK, TABLE racksCount: 4, tiers: 2, rowsPerRack: 4, colsPerRack: 2 }); // Estimates const totalPlants = formData.racksCount * formData.rowsPerRack * formData.colsPerRack * formData.tiers; const handleGenerate = async () => { setLoading(true); try { await layoutApi.generateRoom({ floorId, code: formData.name.toUpperCase().substring(0, 4), // Auto-code ...formData }); onSuccess(); onClose(); } catch (error) { console.error('Failed to generate room:', error); // In a real app, show toast } finally { setLoading(false); } }; return ( Parametric Room Generator
setStep(1)}>1. Basics setStep(2)}>2. Layout setStep(3)}>3. Review {/* STEP 1: BASICS */}
setFormData({ ...formData, name: e.target.value })} className="bg-zinc-900 border-zinc-700" />
{/* STEP 2: LAYOUT */}
{formData.racksCount}
setFormData({ ...formData, racksCount: val })} min={1} max={20} step={1} className="py-4" />
{formData.tiers}
{[1, 2, 3, 4, 5].map(t => ( ))}
setFormData({ ...formData, rowsPerRack: parseInt(e.target.value) || 4 })} className="bg-zinc-900 border-zinc-700" />
setFormData({ ...formData, colsPerRack: parseInt(e.target.value) || 2 })} className="bg-zinc-900 border-zinc-700" />
{/* STEP 3: REVIEW */}

Total Capacity Estimate

Total Plant Sites

{totalPlants}

Canopy Sq. Ft (Est)

{totalPlants * 1.5} sq ft

Units: {formData.racksCount} {formData.setupType}s
Tiers: {formData.tiers}
Grid: {formData.rowsPerRack} x {formData.colsPerRack}
{step > 1 ? ( ) : (
// Spacer )} {step < 3 ? ( ) : ( )}
); }