// cart.jsx — sepet durumu (ilk React Context'imiz), localStorage'a kalıcı
const CartContext = React.createContext(null);
const CART_STORAGE_KEY = "elfinrose_cart_v1";

// Kargo: sabit ücret; eşik ve üzeri sepetlerde ücretsiz.
// (Sunucu tarafındaki karşılığı: supabase/functions/create-order/index.ts —
// iki yer birlikte güncellenmeli.)
const SHIPPING_FEE_KURUS = 15000;             // ₺150
const FREE_SHIPPING_THRESHOLD_KURUS = 150000; // ₺1.500 ve üzeri ücretsiz

function loadStoredCart() {
  try {
    const raw = window.localStorage.getItem(CART_STORAGE_KEY);
    const parsed = raw ? JSON.parse(raw) : [];
    return Array.isArray(parsed) ? parsed : [];
  } catch (e) {
    return [];
  }
}

function CartProvider({ children }) {
  const [items, setItems] = React.useState(loadStoredCart);

  React.useEffect(() => {
    try { window.localStorage.setItem(CART_STORAGE_KEY, JSON.stringify(items)); } catch (e) {}
  }, [items]);

  function addItem(p, qty = 1) {
    setItems((prev) => {
      const idx = prev.findIndex((x) => x.slug === p.slug);
      if (idx >= 0) {
        const next = [...prev];
        next[idx] = { ...next[idx], qty: next[idx].qty + qty };
        return next;
      }
      return [...prev, {
        slug: p.slug, name: p.name, priceKurus: p.priceKurus,
        tone: p.tone, label: p.label, imagePath: p.imagePath || null, qty,
      }];
    });
  }

  function removeItem(slug) {
    setItems((prev) => prev.filter((x) => x.slug !== slug));
  }

  function updateQty(slug, qty) {
    setItems((prev) => prev.map((x) => (x.slug === slug ? { ...x, qty: Math.max(1, qty) } : x)));
  }

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

  const totalKurus = items.reduce((sum, x) => sum + x.priceKurus * x.qty, 0);
  const count = items.reduce((sum, x) => sum + x.qty, 0);
  const shippingKurus = totalKurus === 0 || totalKurus >= FREE_SHIPPING_THRESHOLD_KURUS ? 0 : SHIPPING_FEE_KURUS;
  const grandTotalKurus = totalKurus + shippingKurus;

  const value = { items, addItem, removeItem, updateQty, clear, totalKurus, count, shippingKurus, grandTotalKurus };
  return <CartContext.Provider value={value}>{children}</CartContext.Provider>;
}

function useCart() {
  const ctx = React.useContext(CartContext);
  if (!ctx) throw new Error("useCart must be used within a CartProvider");
  return ctx;
}

Object.assign(window, { CartContext, CartProvider, useCart, SHIPPING_FEE_KURUS, FREE_SHIPPING_THRESHOLD_KURUS });
