// Simple Cart Context
const CartContext = React.createContext(null);

function CartProvider({ children }) {
  const [items, setItems] = React.useState(() => {
    try { return JSON.parse(localStorage.getItem('cart') || '[]'); } catch { return []; }
  });

  React.useEffect(() => { localStorage.setItem('cart', JSON.stringify(items)); }, [items]);

  function addItem(product, quantity, options) {
    setItems((prev) => {
      const q = Number(quantity) || 1;
      const opts = Array.isArray(options) ? options : [];
      const optionsKey = opts.length ? opts.map(o=>o.id).filter(id=>Number.isInteger(id)).sort((a,b)=>a-b).join(',') : '';
      const found = prev.find((i) => i.productId === product.id && i.variationId === (product.variationId || undefined) && (i.optionsKey||'') === optionsKey);
      if (found) {
        return prev.map((i) => (i.productId === product.id && i.variationId === (product.variationId || undefined) && (i.optionsKey||'') === optionsKey) ? { ...i, quantity: i.quantity + q } : i);
      }
      return [...prev, { productId: product.id, variationId: product.variationId || undefined, name: product.name, price_cents: product.price_cents, quantity: q, options: opts, optionsKey }];
    });
  }

  function removeItem(productId, variationId, optionsKey) {
    setItems((prev) => prev.filter((i) => !(i.productId === productId && i.variationId === (variationId || undefined) && (i.optionsKey||'') === (optionsKey||''))));
  }

  function setQuantity(productId, quantity, variationId, optionsKey) {
    const q = Math.max(1, Number(quantity) || 1);
    setItems((prev) => prev.map((i) => (i.productId === productId && i.variationId === (variationId || undefined) && (i.optionsKey||'') === (optionsKey||'')) ? { ...i, quantity: q } : i));
  }

  function clear() { setItems([]); }

  const totalCount = items.reduce((a, b) => a + b.quantity, 0);
  const value = { items, addItem, removeItem, setQuantity, clear, totalCount };
  return React.createElement(CartContext.Provider, { value }, children);
}

function useCart() { return React.useContext(CartContext); }

window.CartContext = { CartProvider, useCart };
