import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { Layers, Plus, Trash2, Copy, Save, ArrowLeft, FileText, Calendar } from 'lucide-react'; import { Recipe } from '../types'; import { comms } from '../communication'; import { TechButton } from '../components/common/TechButton'; export const RecipePage: React.FC = () => { const navigate = useNavigate(); const [recipes, setRecipes] = useState([]); const [selectedId, setSelectedId] = useState(null); const [editedRecipe, setEditedRecipe] = useState(null); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const loadRecipes = async () => { try { const recipeStr = await comms.getRecipeList(); const recipeData = JSON.parse(recipeStr); setRecipes(recipeData); if (recipeData.length > 0) { setSelectedId(recipeData[0].id); setEditedRecipe(recipeData[0]); } } catch (e) { console.error("Failed to load recipes", e); } setIsLoading(false); }; loadRecipes(); }, []); const handleSelect = (r: Recipe) => { setSelectedId(r.id); setEditedRecipe({ ...r }); }; const handleSave = async () => { // Mock Save Logic console.log("Saving recipe:", editedRecipe); // In real app: await comms.saveRecipe(editedRecipe); }; const handleCopy = async () => { if (!selectedId) return; const selectedRecipe = recipes.find(r => r.id === selectedId); if (!selectedRecipe) return; const newName = prompt(`Copy "${selectedRecipe.name}" as:`, `${selectedRecipe.name}_Copy`); if (!newName || newName.trim() === '') return; try { const result = await comms.copyRecipe(selectedId, newName.trim()); if (result.success && result.newRecipe) { const newRecipeList = [...recipes, result.newRecipe]; setRecipes(newRecipeList); setSelectedId(result.newRecipe.id); setEditedRecipe(result.newRecipe); console.log("Recipe copied successfully:", result.newRecipe); } else { alert(`Failed to copy recipe: ${result.message}`); } } catch (error: any) { alert(`Error copying recipe: ${error.message || 'Unknown error'}`); console.error('Recipe copy error:', error); } }; const handleDelete = async () => { if (!selectedId) return; const selectedRecipe = recipes.find(r => r.id === selectedId); if (!selectedRecipe) return; const confirmed = window.confirm(`Are you sure you want to delete "${selectedRecipe.name}"?`); if (!confirmed) return; try { const result = await comms.deleteRecipe(selectedId); if (result.success) { const newRecipeList = recipes.filter(r => r.id !== selectedId); setRecipes(newRecipeList); // Select first recipe or clear selection if (newRecipeList.length > 0) { setSelectedId(newRecipeList[0].id); setEditedRecipe(newRecipeList[0]); } else { setSelectedId(null); setEditedRecipe(null); } console.log("Recipe deleted successfully"); } else { alert(`Failed to delete recipe: ${result.message}`); } } catch (error: any) { alert(`Error deleting recipe: ${error.message || 'Unknown error'}`); console.error('Recipe delete error:', error); } }; return (
{/* Header */}

RECIPE MANAGEMENT

TOTAL: {recipes.length}
{/* Left: Recipe List */}
RECIPE LIST
{recipes.map(r => (
handleSelect(r)} className={` p-3 rounded border cursor-pointer transition-all group ${selectedId === r.id ? 'bg-neon-blue/20 border-neon-blue text-white shadow-glow-blue' : 'bg-white/5 border-white/5 text-slate-400 hover:bg-white/10 hover:border-white/20'} `} >
{r.name}
{r.lastModified}
))}
{/* List Actions */}
{/* Right: Editor */}
RECIPE EDITOR {editedRecipe && {editedRecipe.id}}
{editedRecipe ? (
setEditedRecipe({ ...editedRecipe, name: e.target.value })} className="w-full bg-black/40 border border-white/10 rounded px-4 py-3 text-white focus:border-neon-blue focus:outline-none transition-colors font-mono" />
{/* Placeholder for more parameters */}
Additional process parameters would go here...
) : (

Select a recipe to edit

)}
{/* Editor Actions */}
SAVE CHANGES
); };