// Saraya Events — Marketplace React Hooks (Phase 2)
// Provides: useProducts, useRentals, useServices, useCategories
// Each hook falls back to static data.js data when Supabase is not configured.

const { useState: useMHState, useEffect: useMHEffect, useCallback: useMHCallback } = React;

// ── useCategories ─────────────────────────────────────────────────────────────
function useCategories(type) {
  const [categories, setCategories] = useMHState([]);
  const [loading, setLoading] = useMHState(true);

  useMHEffect(() => {
    let cancelled = false;
    if (!window.supabaseConfigured) {
      setLoading(false);
      return;
    }
    window.SarayaService.categories.list(type).then((data) => {
      if (!cancelled) { setCategories(data); setLoading(false); }
    }).catch(() => { if (!cancelled) setLoading(false); });
    return () => { cancelled = true; };
  }, [type]);

  return { categories, loading };
}
window.useCategories = useCategories;

// ── useProducts ───────────────────────────────────────────────────────────────
function useProducts(filters) {
  const [items, setItems]   = useMHState([]);
  const [loading, setLoading] = useMHState(true);
  const [error, setError]   = useMHState(null);

  const categorySlug = filters && filters.categorySlug;
  const vendorId     = filters && filters.vendorId;
  const onlyActive   = filters && filters.onlyActive !== undefined ? filters.onlyActive : true;

  const load = useMHCallback(async () => {
    if (!window.supabaseConfigured) {
      let fallback = (window.SARAYA && window.SARAYA.STORE_ITEMS) ? [...window.SARAYA.STORE_ITEMS] : [];
      if (categorySlug && categorySlug !== 'all') fallback = fallback.filter((i) => i.category === categorySlug);
      if (onlyActive) fallback = fallback.filter((i) => !i.hidden);
      setItems(fallback);
      setLoading(false);
      return;
    }
    setLoading(true);
    setError(null);
    try {
      const data = await window.SarayaService.products.list({ categorySlug, vendorId, onlyActive });
      setItems(data);
    } catch (e) {
      setError(e.message);
    }
    setLoading(false);
  }, [categorySlug, vendorId, onlyActive]);

  useMHEffect(() => { load(); }, [load]);

  return { items, loading, error, reload: load };
}
window.useProducts = useProducts;

// ── useRentals ────────────────────────────────────────────────────────────────
function useRentals(filters) {
  const [items, setItems]     = useMHState([]);
  const [loading, setLoading] = useMHState(true);
  const [error, setError]     = useMHState(null);

  const categorySlug = filters && filters.categorySlug;
  const vendorId     = filters && filters.vendorId;
  const onlyActive   = filters && filters.onlyActive !== undefined ? filters.onlyActive : true;

  const load = useMHCallback(async () => {
    if (!window.supabaseConfigured) {
      setItems([]);
      setLoading(false);
      return;
    }
    setLoading(true);
    setError(null);
    try {
      const data = await window.SarayaService.rentals.list({ categorySlug, vendorId, onlyActive });
      setItems(data);
    } catch (e) {
      setError(e.message);
    }
    setLoading(false);
  }, [categorySlug, vendorId, onlyActive]);

  useMHEffect(() => { load(); }, [load]);

  return { items, loading, error, reload: load };
}
window.useRentals = useRentals;

// ── useServices ───────────────────────────────────────────────────────────────
function useServices(filters) {
  const [items, setItems]     = useMHState([]);
  const [loading, setLoading] = useMHState(true);
  const [error, setError]     = useMHState(null);

  const categorySlug = filters && filters.categorySlug;
  const vendorId     = filters && filters.vendorId;
  const onlyActive   = filters && filters.onlyActive !== undefined ? filters.onlyActive : true;

  const load = useMHCallback(async () => {
    if (!window.supabaseConfigured) {
      setItems([]);
      setLoading(false);
      return;
    }
    setLoading(true);
    setError(null);
    try {
      const data = await window.SarayaService.services.list({ categorySlug, vendorId, onlyActive });
      setItems(data);
    } catch (e) {
      setError(e.message);
    }
    setLoading(false);
  }, [categorySlug, vendorId, onlyActive]);

  useMHEffect(() => { load(); }, [load]);

  return { items, loading, error, reload: load };
}
window.useServices = useServices;
