// brodo-cart.jsx — cart + UI state via React context
(function () {
  const { createContext, useContext, useState, useCallback, useMemo } = React;
  const CartCtx = createContext(null);

  function optionSig(options) {
    return Object.keys(options || {}).sort().map((k) => k + ":" + options[k]).join("|");
  }

  function CartProvider({ children }) {
    const [items, setItems] = useState([]);     // [{key, productId, name, img, price, options, qty}]
    const [drawerOpen, setDrawerOpen] = useState(false);
    const [quickView, setQuickView] = useState(null); // product object or null
    const [lastAdded, setLastAdded] = useState(null); // key of last added item (for pulse)

    const add = useCallback((product, options, qty = 1) => {
      const key = product.id + "#" + optionSig(options);
      setItems((prev) => {
        const i = prev.findIndex((it) => it.key === key);
        if (i >= 0) {
          const next = prev.slice();
          next[i] = { ...next[i], qty: next[i].qty + qty };
          return next;
        }
        return [...prev, { key, productId: product.id, name: product.name, img: product.img, photo: product.photo, price: product.price, badge: product.badge, options: options || {}, qty }];
      });
      setLastAdded(key);
      setDrawerOpen(true);
      window.clearTimeout(window.__brodoPulse);
      window.__brodoPulse = window.setTimeout(() => setLastAdded(null), 1400);
    }, []);

    const setQty = useCallback((key, qty) => {
      setItems((prev) => prev.flatMap((it) => {
        if (it.key !== key) return [it];
        const q = Math.max(0, qty);
        return q === 0 ? [] : [{ ...it, qty: q }];
      }));
    }, []);

    const remove = useCallback((key) => setItems((prev) => prev.filter((it) => it.key !== key)), []);
    const clear = useCallback(() => setItems([]), []);

    const count = useMemo(() => items.reduce((s, it) => s + it.qty, 0), [items]);
    const subtotal = useMemo(() => items.reduce((s, it) => s + it.qty * it.price, 0), [items]);

    const value = {
      items, count, subtotal,
      add, setQty, remove, clear,
      drawerOpen, setDrawerOpen,
      quickView, setQuickView,
      lastAdded,
    };
    return React.createElement(CartCtx.Provider, { value }, children);
  }

  window.CartProvider = CartProvider;
  window.useCart = () => useContext(CartCtx);
})();
