"use client"; import { useState, useEffect } from "react"; import type { ArticoloAssegnatoMacchina } from "@/src/types/artMacchineParti"; import type { Stabilimento, Magazzino } from "@/src/types/stabilimento"; interface ArticoliMacchinaModalProps { macchinaId: number; macchinaNome: string; articoli: ArticoloAssegnatoMacchina[]; onClose: () => void; onArticoloRimosso: () => void; } interface RimuoviModalState { articolo: ArticoloAssegnatoMacchina; quantita: number; opzione: "carico" | "elimina"; idMagazzino: number | null; } export default function ArticoliMacchinaModal({ macchinaId, macchinaNome, articoli, onClose, onArticoloRimosso, }: ArticoliMacchinaModalProps) { const [rimuoviModal, setRimuoviModal] = useState(null); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const [stabilimenti, setStabilimenti] = useState([]); const [magazzini, setMagazzini] = useState([]); const [selectedStabilimento, setSelectedStabilimento] = useState(null); useEffect(() => { async function fetchData() { try { const [stabRes, magRes] = await Promise.all([ fetch("/api/stabilimenti"), fetch("/api/magazzini"), ]); if (stabRes.ok && magRes.ok) { const stabData = await stabRes.json(); const magData = await magRes.json(); setStabilimenti(stabData.stabilimenti); setMagazzini(magData.magazzini); } } catch (err) { console.error("Errore caricamento stabilimenti/magazzini:", err); } } fetchData(); }, []); const filteredMagazzini = selectedStabilimento ? magazzini.filter((m) => m.id_stabilimento === selectedStabilimento) : magazzini; const handleRimuoviClick = (articolo: ArticoloAssegnatoMacchina) => { setRimuoviModal({ articolo, quantita: 1, opzione: "carico", idMagazzino: null, }); setSelectedStabilimento(null); setError(null); }; const handleConfermaRimozione = async () => { if (!rimuoviModal) return; if (rimuoviModal.opzione === "carico" && !rimuoviModal.idMagazzino) { setError("Seleziona un magazzino per il rientro"); return; } setSaving(true); setError(null); try { const res = await fetch( `/api/art-macchine-parti/${macchinaId}/${rimuoviModal.articolo.id_articolo}`, { method: "DELETE", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ quantita: rimuoviModal.quantita, opzione: rimuoviModal.opzione, idMagazzino: rimuoviModal.idMagazzino, }), } ); if (!res.ok) { const data = await res.json(); throw new Error(data.error || "Errore nella rimozione"); } setRimuoviModal(null); onArticoloRimosso(); } catch (err) { setError(err instanceof Error ? err.message : "Errore sconosciuto"); } finally { setSaving(false); } }; return (

Articoli Assegnati

{macchinaNome}

{articoli.length === 0 ? (
Nessun articolo assegnato
) : (
{articoli.map((art) => (

{art.descrizione}

{art.codice}

{art.quantita}
assegnati
))}
)}
Totale: {articoli.reduce((sum, a) => sum + a.quantita, 0)} pezzi in {articoli.length} articoli
{/* Modal conferma rimozione */} {rimuoviModal && (
!saving && setRimuoviModal(null)} />

Rimuovi Articolo

{rimuoviModal.articolo.descrizione}

{error && (
{error}
)}
setRimuoviModal({ ...rimuoviModal, quantita: Math.min( Math.max(1, parseInt(e.target.value) || 1), rimuoviModal.articolo.quantita ), }) } className="w-full px-3 py-2 bg-zinc-800 border border-zinc-700 rounded-lg text-white focus:outline-none focus:ring-2 focus:ring-teal-500" />
{rimuoviModal.opzione === "carico" && (

Seleziona il magazzino di destinazione

{!rimuoviModal.idMagazzino && (

Devi selezionare un magazzino per confermare il rientro

)}
)}
)}
); }