import { create } from 'zustand'; import { immer } from 'zustand/middleware/immer'; type MaterialsStore = { materials: MaterialsSchema; addMaterial: (material: MaterialSchema) => void; removeMaterial: (materialId: string) => void; updateMaterial: (materialId: string, updates: Partial) => void; setStartTime: (materialId: string, startTime: string) => void; setEndTime: (materialId: string, endTime: string) => void; setCost: (materialId: string, cost: number) => void; setWeight: (materialId: string, weight: number) => void; getMaterialById: (materialId: string) => MaterialSchema | undefined; }; export const useMaterialStore = create()( immer((set, get) => ({ materials: [], addMaterial: (material) => { set((state) => { state.materials.push(material); }); }, removeMaterial: (materialId) => { set((state) => { state.materials = state.materials.filter(m => m.materialId !== materialId); }); }, updateMaterial: (materialId, updates) => { set((state) => { const material = state.materials.find(m => m.materialId === materialId); if (material) { Object.assign(material, updates); } }); }, setStartTime: (materialId, startTime) => { set((state) => { const material = state.materials.find(m => m.materialId === materialId); if (material) material.startTime = startTime; }); }, setEndTime: (materialId, endTime) => { set((state) => { const material = state.materials.find(m => m.materialId === materialId); if (material) material.endTime = endTime; }); }, setCost: (materialId, cost) => { set((state) => { const material = state.materials.find(m => m.materialId === materialId); if (material) material.cost = cost; }); }, setWeight: (materialId, weight) => { set((state) => { const material = state.materials.find(m => m.materialId === materialId); if (material) material.weight = weight; }); }, getMaterialById: (materialId) => { return get().materials.find(m => m.materialId === materialId); }, })) );