import React, { createContext, useState, useContext, ReactNode } from 'react'; export type CartItem = { id: string; name: string; quantity: number; price: number; image: string; }; type CartState = { items: CartItem[]; total: number; }; type CartContextType = { cart: CartState; addItem: (item: CartItem) => void; clearCart: () => void; updateQuantity: (id: string, quantity: number) => void; }; const CartContext = createContext(undefined); export const CartProvider = ({ children }: { children: ReactNode }) => { const [cart, setCart] = useState({ items: [], total: 0 }); const addItem = (item: CartItem) => { setCart(prev => { const existing = prev.items.find(i => i.id === item.id); let updatedItems; if (existing) { updatedItems = prev.items.map(i => i.id === item.id ? { ...i, quantity: i.quantity + item.quantity } : i ); } else { updatedItems = [...prev.items, item]; } const updatedTotal = updatedItems.reduce((sum, i) => sum + i.quantity * i.price, 0); return { items: updatedItems, total: updatedTotal }; }); }; const clearCart = () => setCart({ items: [], total: 0 }); const updateQuantity = (id: string, quantity: number) => { setCart(prev => { const updatedItems = prev.items.map(item => item.id === id ? { ...item, quantity } : item ); const updatedTotal = updatedItems.reduce((sum, i) => sum + i.quantity * i.price, 0); return { items: updatedItems, total: updatedTotal }; }); }; return ( {children} ); }; export const useCart = () => { const context = useContext(CartContext); if (!context) { throw new Error('useCart must be used within a CartProvider'); } return context; };