import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Plus, X, Clock, Flame, ChefHat } from 'lucide-react'; import Button from '../../../ui/Button/Button'; import Card from '../../../ui/Card/Card'; import Input from '../../../ui/Input/Input'; import Select from '../../../ui/Select/Select'; export interface ProductionProcess { id: string; name: string; sourceProduct: string; finishedProduct: string; processType: 'baking' | 'decorating' | 'finishing' | 'assembly'; duration: number; // minutes temperature?: number; // celsius instructions?: string; } export interface ProductionProcessesStepProps { onUpdate?: (data: { processes: ProductionProcess[] }) => void; onComplete?: () => void; initialData?: { processes?: ProductionProcess[]; }; } const PROCESS_TEMPLATES: Partial[] = [ { name: 'Horneado de Pan Pre-cocido', processType: 'baking', duration: 15, temperature: 200, instructions: 'Hornear a 200°C durante 15 minutos hasta dorar', }, { name: 'Terminado de Croissant Congelado', processType: 'baking', duration: 20, temperature: 180, instructions: 'Descongelar 2h, hornear a 180°C por 20 min', }, { name: 'Decoración de Pastel', processType: 'decorating', duration: 30, instructions: 'Aplicar crema, decorar y refrigerar', }, { name: 'Montaje de Sándwich', processType: 'assembly', duration: 5, instructions: 'Ensamblar ingredientes según especificación', }, ]; export const ProductionProcessesStep: React.FC = ({ onUpdate, onComplete, initialData, }) => { const { t } = useTranslation(); const [processes, setProcesses] = useState( initialData?.processes || [] ); const [isAddingNew, setIsAddingNew] = useState(false); const [showTemplates, setShowTemplates] = useState(true); const [newProcess, setNewProcess] = useState>({ name: '', sourceProduct: '', finishedProduct: '', processType: 'baking', duration: 15, temperature: 180, instructions: '', }); const processTypeOptions = [ { value: 'baking', label: t('onboarding:processes.type.baking', 'Horneado') }, { value: 'decorating', label: t('onboarding:processes.type.decorating', 'Decoración') }, { value: 'finishing', label: t('onboarding:processes.type.finishing', 'Terminado') }, { value: 'assembly', label: t('onboarding:processes.type.assembly', 'Montaje') }, ]; const handleAddFromTemplate = (template: Partial) => { const newProc: ProductionProcess = { id: `process-${Date.now()}`, name: template.name || '', sourceProduct: '', finishedProduct: '', processType: template.processType || 'baking', duration: template.duration || 15, temperature: template.temperature, instructions: template.instructions || '', }; const updated = [...processes, newProc]; setProcesses(updated); onUpdate?.({ processes: updated }); setShowTemplates(false); }; const handleAddNew = () => { if (!newProcess.name || !newProcess.sourceProduct || !newProcess.finishedProduct) { return; } const process: ProductionProcess = { id: `process-${Date.now()}`, name: newProcess.name, sourceProduct: newProcess.sourceProduct, finishedProduct: newProcess.finishedProduct, processType: newProcess.processType || 'baking', duration: newProcess.duration || 15, temperature: newProcess.temperature, instructions: newProcess.instructions || '', }; const updated = [...processes, process]; setProcesses(updated); onUpdate?.({ processes: updated }); // Reset form setNewProcess({ name: '', sourceProduct: '', finishedProduct: '', processType: 'baking', duration: 15, temperature: 180, instructions: '', }); setIsAddingNew(false); }; const handleRemove = (id: string) => { const updated = processes.filter(p => p.id !== id); setProcesses(updated); onUpdate?.({ processes: updated }); }; const handleContinue = () => { onComplete?.(); }; const getProcessIcon = (type: string) => { switch (type) { case 'baking': return ; case 'decorating': return ; case 'finishing': case 'assembly': return ; default: return ; } }; return (
{/* Header */}

{t('onboarding:processes.title', 'Procesos de Producción')}

{t( 'onboarding:processes.subtitle', 'Define los procesos que usas para transformar productos pre-elaborados en productos terminados' )}

{/* Templates Section */} {showTemplates && processes.length === 0 && (

{t('onboarding:processes.templates.title', '⚡ Comienza rápido con plantillas')}

{t('onboarding:processes.templates.subtitle', 'Haz clic en una plantilla para agregarla')}

{PROCESS_TEMPLATES.map((template, index) => ( ))}
)} {/* Existing Processes */} {processes.length > 0 && (

{t('onboarding:processes.your_processes', 'Tus Procesos')} ({processes.length})

{processes.map((process) => (
{getProcessIcon(process.processType)}

{process.name}

{process.sourceProduct && (

{t('onboarding:processes.source', 'Desde')}: {' '} {process.sourceProduct}

)} {process.finishedProduct && (

{t('onboarding:processes.finished', 'Hasta')}: {' '} {process.finishedProduct}

)}
⏱️ {process.duration} min {process.temperature && 🌡️ {process.temperature}°C}
{process.instructions && (

{process.instructions}

)}
))}
)} {/* Add New Process Form */} {isAddingNew && (

{t('onboarding:processes.add_new', 'Nuevo Proceso')}

setNewProcess({ ...newProcess, name: e.target.value })} placeholder={t('onboarding:processes.form.name_placeholder', 'Ej: Horneado de pan')} required />
setNewProcess({ ...newProcess, sourceProduct: e.target.value })} placeholder={t('onboarding:processes.form.source_placeholder', 'Ej: Pan pre-cocido')} required /> setNewProcess({ ...newProcess, finishedProduct: e.target.value })} placeholder={t('onboarding:processes.form.finished_placeholder', 'Ej: Pan fresco')} required /> setNewProcess({ ...newProcess, duration: parseInt(e.target.value) })} min={1} /> {(newProcess.processType === 'baking' || newProcess.processType === 'finishing') && ( setNewProcess({ ...newProcess, temperature: parseInt(e.target.value) || undefined })} placeholder="180" /> )}