import React, { useState, useEffect } from 'react'; import { db } from '../../firebase/config'; import { ref, onValue, push, set, remove, update } from 'firebase/database'; import { Plus, Trash2, Edit3, AlertTriangle, X, Save } from 'lucide-react'; export default function InventoryControl() { const [items, setItems] = useState([]); const [formData, setFormData] = useState({ name: '', quantity: '', unit: '', minStock: '' }); const [editingItem, setEditingItem] = useState(null); const [isModalOpen, setIsModalOpen] = useState(false); useEffect(() => { const inventoryRef = ref(db, 'inventory'); onValue(inventoryRef, (snapshot) => { const data = snapshot.val(); if (data) { const productList = Object.keys(data).map(key => ({ id: key, ...data[key] })); setItems(productList); } else { setItems([]); } }); }, []); const handleAddItem = async (e) => { e.preventDefault(); if (!formData.name || !formData.quantity) return; const inventoryRef = ref(db, 'inventory'); const newItemRef = push(inventoryRef); await set(newItemRef, { name: formData.name, quantity: Number(formData.quantity), unit: formData.unit || 'Und', minStock: Number(formData.minStock) || 10 }); setFormData({ name: '', quantity: '', unit: '', minStock: '' }); }; const handleDelete = async (id) => { if(window.confirm('¿Seguro que deseas eliminar este insumo?')){ await remove(ref(db, `inventory/${id}`)); } }; const openEdit = (item) => { setEditingItem({ ...item }); setIsModalOpen(true); }; const handleSaveEdit = async () => { if (!editingItem.name) return; const { id, ...updates } = editingItem; await update(ref(db, `inventory/${id}`), { ...updates, quantity: Number(updates.quantity), minStock: Number(updates.minStock) }); setEditingItem(null); setIsModalOpen(false); }; const handleAddStock = async (id, currentQty) => { await set(ref(db, `inventory/${id}/quantity`), currentQty + 10); } return (

Control de Stock

Registrar Nuevo Insumo

setFormData({...formData, name: e.target.value})} required style={inputStyle} placeholder="Tomate rojo" />
setFormData({...formData, quantity: e.target.value})} required style={inputStyle} placeholder="50" />
setFormData({...formData, minStock: e.target.value})} style={inputStyle} placeholder="10" />
setFormData({...formData, unit: e.target.value})} style={inputStyle} placeholder="Kg, Lt, Und" />
{items.length === 0 ? ( ) : ( items.map((item) => { const isLow = item.quantity <= (item.minStock || 10); return ( ) }) )}
Insumo Stock Actual Estado Acciones
Sin insumos registrados
{item.name} {item.quantity} {item.unit} {isLow ? ( RELLENAR ) : ( ÓPTIMO )}
{/* Modal de Edición */} {isModalOpen && (

Editar Insumo

setEditingItem({...editingItem, name: e.target.value})} style={inputStyle} />
setEditingItem({...editingItem, quantity: e.target.value})} style={inputStyle} />
setEditingItem({...editingItem, minStock: e.target.value})} style={inputStyle} />
setEditingItem({...editingItem, unit: e.target.value})} style={inputStyle} />
)}
); } const inputStyle = { width: '100%', padding: '0.8rem', borderRadius: '8px', background: 'rgba(255,255,255,0.05)', border: '1px solid var(--border-subtle)', color: '#fff', outline: 'none' }; const labelStyle = { display: 'block', marginBottom: '0.5rem', fontSize: '0.85rem', color: 'var(--text-muted)' }; const actionBtnStyle = { width: '32px', height: '32px', borderRadius: '8px', border: '1px solid var(--border-subtle)', background: 'rgba(255,255,255,0.05)', color: 'var(--text-main)', cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', transition: 'all 0.2s', fontSize: '0.75rem', fontWeight: '700' };