import React, { useState, useEffect } from 'react'; import { Modal } from '../Modal'; import { Input } from '../Input'; import { Button } from '../Button'; import { Select } from '../Select'; import { stockService, type StockItem } from '../../services/stockService'; import api from '../../services/api'; import { useAuth } from '../../context/useAuth'; import { useToast } from '../../hooks/useToast'; interface StockModalProps { isOpen: boolean; onClose: () => void; onSuccess: () => void; initialData?: StockItem; initialType?: 'PAINT' | 'THINNER'; } export const StockModal: React.FC = ({ isOpen, onClose, onSuccess, initialData, initialType = 'PAINT' }) => { const { isGuest } = useAuth(); const { showGuestWarning } = useToast(); const [loading, setLoading] = useState(false); const [dataSheets, setDataSheets] = useState([]); // Form Data const [dataSheetId, setDataSheetId] = useState(''); const [rrNumber, setRrNumber] = useState(''); const [batchNumber, setBatchNumber] = useState(''); const [color, setColor] = useState(''); const [invoiceNumber, setInvoiceNumber] = useState(''); const [receivedBy, setReceivedBy] = useState(''); const [quantity, setQuantity] = useState(''); const [unit, setUnit] = useState('L'); const [expirationDate, setExpirationDate] = useState(''); const [minStock, setMinStock] = useState(''); const [notes, setNotes] = useState(''); useEffect(() => { const fetchDataSheets = async () => { try { const res = await api.get('/datasheets'); // Assuming this endpoint exists and lists all setDataSheets(res.data); } catch (err) { console.error("Error fetching datasheets", err); } }; if (isOpen) { fetchDataSheets(); if (initialData) { const dsId = (typeof initialData.dataSheetId === 'object') ? (initialData.dataSheetId.id || initialData.dataSheetId._id) : initialData.dataSheetId; setDataSheetId(dsId || ''); setRrNumber(initialData.rrNumber); setBatchNumber(initialData.batchNumber); setColor(initialData.color || ''); setInvoiceNumber(initialData.invoiceNumber || ''); setReceivedBy(initialData.receivedBy || ''); setQuantity(String(initialData.quantity)); setUnit(initialData.unit); setExpirationDate(initialData.expirationDate ? new Date(initialData.expirationDate).toISOString().split('T')[0] : ''); setMinStock(String(initialData.minStock || 0)); setNotes(initialData.notes || ''); } else { // Reset form setDataSheetId(''); setRrNumber(''); setBatchNumber(''); setColor(''); setInvoiceNumber(''); setReceivedBy(''); setQuantity(''); setUnit('L'); setExpirationDate(''); setMinStock('0'); setNotes(''); } } }, [isOpen, initialData]); // Handle filling color etc if picking a DataSheet (Optional feature, not implemented yet) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (isGuest()) { showGuestWarning(); return; } setLoading(true); const payload: any = { dataSheetId, rrNumber, batchNumber, color, invoiceNumber, receivedBy, unit, expirationDate: expirationDate || undefined, minStock: Number(minStock) || 0, notes }; // If creating, send quantity. If updating, DO NOT send quantity (handled via adjusts) if (!initialData) { payload.quantity = Number(quantity); } try { if (initialData) { const itemId = initialData.id || initialData._id; await stockService.update(itemId!, payload); } else { await stockService.create(payload); } onSuccess(); } catch (error: any) { console.error('Error saving stock item:', error); alert(error.response?.data?.error || 'Erro ao salvar item.'); } finally { setLoading(false); } }; const isThinner = initialData ? (typeof initialData.dataSheetId === 'object' && (initialData.dataSheetId.type === 'THINNER' || initialData.dataSheetId.type === 'DILUENTE')) : (initialType === 'THINNER'); const filteredDataSheets = dataSheets.filter(ds => { const dsType = ds.type || 'PAINT'; const isDsThinner = dsType === 'THINNER' || dsType === 'DILUENTE'; return isThinner ? isDsThinner : !isDsThinner; }); return (
setRrNumber(e.target.value)} required disabled={!!initialData} // Usually unique ID shouldn't change easily /> setBatchNumber(e.target.value)} required />
setInvoiceNumber(e.target.value)} /> setReceivedBy(e.target.value)} />
{!isThinner && ( setColor(e.target.value)} placeholder="Ex: Amarelo Segurança, CINZA N6.5" /> )} {!initialData && (
setQuantity(e.target.value)} required /> setExpirationDate(e.target.value)} /> )}
setMinStock(e.target.value)} placeholder="Qtd de alerta" />
setNotes(e.target.value)} />
); };