/* mk-data.jsx — capa de datos REAL del marketplace (Supabase).
   Reemplaza los mocks del prototipo de diseño: lee la vista pública
   marketplace_restaurantes, el catálogo (categorías/productos/horarios con
   RLS de lectura pública) y las RPCs mk_* creadas en la Fase 1. */

/* mkCOP, mkSlugify y mkEstadoHorario viven en lib/calc/mk-comun.js
   (compartidos con el panel del restaurante); ya estan en window. */

/* ── Cargas desde Supabase ─────────────────────────────────────────────── */

/* Home: restaurantes activos + conteo de pedidos del mes (para "más pedidos") */
async function mkCargarRestaurantes() {
  if (!window.treego_db) return { lista: [], masPedidos: [] };
  const [restRes, topRes, horRes] = await Promise.all([
    window.treego_db.from("marketplace_restaurantes").select("*").order("nombre"),
    window.treego_db.rpc("mk_mas_pedidos"),
    window.treego_db.from("horarios_marketplace").select("*"),
  ]);
  const lista = restRes.data || [];
  const horarios = horRes.data || [];
  lista.forEach((r) => {
    r.horarios = horarios.filter((h) => h.restaurante_id === r.restaurante_id);
    r.estado = mkEstadoHorario(r.horarios);
  });
  const conteo = {};
  (topRes.data || []).forEach((t) => { conteo[t.restaurante_id] = Number(t.pedidos_mes); });
  const masPedidos = lista
    .filter((r) => conteo[r.restaurante_id] > 0)
    .sort((a, b) => (conteo[b.restaurante_id] || 0) - (conteo[a.restaurante_id] || 0))
    .slice(0, 8);
  return { lista, masPedidos };
}

/* Página del restaurante: perfil + menú por categorías + horarios.
   Devuelve null si el slug no existe o el restaurante no está activo. */
async function mkCargarRestaurante(slug) {
  if (!window.treego_db || !slug) return null;
  const { data: rest } = await window.treego_db
    .from("marketplace_restaurantes").select("*").eq("slug", slug).maybeSingle();
  if (!rest) return null;

  const [catRes, prodRes, horRes] = await Promise.all([
    window.treego_db.from("categorias_menu").select("*")
      .eq("restaurante_id", rest.restaurante_id).eq("activa", true)
      .order("orden").order("id"),
    window.treego_db.from("productos").select("*")
      .eq("restaurante_id", rest.restaurante_id).eq("disponible", true)
      .order("orden").order("id"),
    window.treego_db.from("horarios_marketplace").select("*")
      .eq("restaurante_id", rest.restaurante_id),
  ]);

  const categorias = catRes.data || [];
  const productos = prodRes.data || [];
  /* menú agrupado: categorías activas con productos + grupo "Menú" para sueltos */
  const porCat = new Map();
  categorias.forEach((c) => porCat.set(c.id, { cat: c.nombre, orden: c.orden, items: [] }));
  const sueltos = [];
  productos.forEach((p) => {
    const g = porCat.get(p.categoria_id);
    if (g) g.items.push(p); else sueltos.push(p);
  });
  const menu = [...porCat.values()].filter((g) => g.items.length > 0);
  if (sueltos.length) menu.push({ cat: "Menú", orden: 9999, items: sueltos });

  rest.horarios = horRes.data || [];
  rest.estado = mkEstadoHorario(rest.horarios);
  return { rest, menu, productos };
}

Object.assign(window, { mkCargarRestaurantes, mkCargarRestaurante });
