import { create } from "zustand"; import { persist } from "zustand/middleware"; export interface CartItem { id: number; name: string; price: string; quantity: number; image: string; sku: string; } interface CartStore { items: CartItem[]; isOpen: boolean; addItem: (item: CartItem) => void; removeItem: (id: number) => void; updateQuantity: (id: number, quantity: number) => void; toggleCart: () => void; openCart: () => void; closeCart: () => void; clearCart: () => void; getTotal: () => number; getItemCount: () => number; } export const useCartStore = create()( persist( (set, get) => ({ items: [], isOpen: false, addItem: (item) => { const items = get().items; const existingItem = items.find((i) => i.id === item.id); if (existingItem) { set({ items: items.map((i) => i.id === item.id ? { ...i, quantity: i.quantity + item.quantity } : i ), }); } else { set({ items: [...items, item] }); } set({ isOpen: true }); }, removeItem: (id) => { set({ items: get().items.filter((i) => i.id !== id) }); }, updateQuantity: (id, quantity) => { if (quantity <= 0) { set({ items: get().items.filter((i) => i.id !== id) }); } else { set({ items: get().items.map((i) => i.id === id ? { ...i, quantity } : i ), }); } }, toggleCart: () => set({ isOpen: !get().isOpen }), openCart: () => set({ isOpen: true }), closeCart: () => set({ isOpen: false }), clearCart: () => set({ items: [] }), getTotal: () => { return get().items.reduce((total, item) => { return total + parseFloat(item.price) * item.quantity; }, 0); }, getItemCount: () => { return get().items.reduce((count, item) => count + item.quantity, 0); }, }), { name: "manoonoils-cart", } ) );