// Bom Pain — content data
const BPData = {
  contact: {
    whatsapp: "595983364501",
    whatsappDisplay: "+595 983 364 501",
    instagram: "bom.paincafebar",
    instagramUrl: "https://www.instagram.com/bom.paincafebar/",
    whatsappUrl: "https://wa.me/595983364501",
    address: "Ñemby, Paraguay",
    mapsEmbed: "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3607.7893985!2d-57.5490170!3d-25.3976552!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x945dadec1640bed1%3A0x339f374e1c7c7ed3!2sBompain!5e0!3m2!1ses!2spy!4v1680000000000!5m2!1ses!2spy",
    mapsUrl: "https://www.google.com/maps/place/Bompain/@-25.3976552,-57.5468283,17z",
  },
  menu: {
    cafe: {
      label: "Café",
      items: [
        { name: "Espresso", desc: "Doble, cuerpo intenso, crema dorada.", price: "Gs 12.000", tags: "Clásico", icon: "coffee" },
        { name: "Cappuccino", desc: "Espresso, leche vaporizada, cacao en polvo.", price: "Gs 18.000", tags: "Italiano", icon: "local_cafe" },
        { name: "Café con leche", desc: "Café de altura paraguayo con leche entera.", price: "Gs 15.000", tags: "Casa", icon: "local_cafe" },
        { name: "Latte de vainilla", desc: "Espresso suave con vainilla y leche cremosa.", price: "Gs 22.000", tags: "Especialidad", icon: "local_cafe" },
        { name: "Mocha de chocolate", desc: "Café, cacao oscuro, leche y chantilly artesanal.", price: "Gs 24.000", tags: "Dulce", icon: "coffee" },
        { name: "Café de filtro", desc: "Método V60. Selección rotativa del barista.", price: "Gs 20.000", tags: "Filtrado", icon: "coffee_maker" },
      ],
    },
    minutas: {
      label: "Minutas",
      items: [
        { name: "Croissant de mantequilla", desc: "Hojaldre artesanal, fermentación de 48 horas.", price: "Gs 14.000", tags: "Estrella", icon: "bakery_dining" },
        { name: "Pain au chocolat", desc: "Hojaldre con chocolate semiamargo.", price: "Gs 16.000", tags: "Dulce", icon: "bakery_dining" },
        { name: "Chipa Almidón", desc: "Almidón, queso paraguay y anís. Recién horneada.", price: "Gs 8.000", tags: "Tradición", icon: "bakery_dining" },
        { name: "Medialunas dulces", desc: "Tres unidades, glaseado con miel de caña.", price: "Gs 12.000", tags: "Trío", icon: "bakery_dining" },
        { name: "Mbeju", desc: "Almidón, queso y leche, tostado a la sartén.", price: "Gs 14.000", tags: "Mañana", icon: "breakfast_dining" },
        { name: "Empanadas de carne", desc: "Frita, masa hojaldrada. Dos unidades.", price: "Gs 16.000", tags: "Porción", icon: "lunch_dining" },
      ],
    },
    almuerzos: {
      label: "Almuerzos",
      items: [
        { name: "Sandwich de lomito", desc: "Pan brioche, lomo, queso, lechuga y tomate.", price: "Gs 38.000", tags: "Estrella", icon: "lunch_dining" },
        { name: "Croque Monsieur", desc: "Jamón, queso gruyère, bechamel sobre brioche.", price: "Gs 42.000", tags: "Francés", icon: "lunch_dining" },
        { name: "Quiche Lorraine", desc: "Tarta salada con tocino, queso y crema.", price: "Gs 36.000", tags: "Clásica", icon: "restaurant" },
        { name: "Ensalada Bom Pain", desc: "Hojas verdes, queso paraguay, nueces, vinagreta.", price: "Gs 32.000", tags: "Fresca", icon: "eco" },
        { name: "Tortilla de la casa", desc: "Huevos, papa, cebolla. Servida con pan tostado.", price: "Gs 28.000", tags: "Casa", icon: "egg" },
        { name: "Sopa Paraguaya", desc: "Bizcocho de maíz con queso y cebolla. Porción.", price: "Gs 18.000", tags: "Bandera", icon: "breakfast_dining" },
      ],
    },
    bebidas: {
      label: "Bebidas",
      items: [
        { name: "Limonada natural", desc: "Limón fresco, agua mineral, azúcar de caña.", price: "Gs 10.000", tags: "Fresca", icon: "local_bar" },
        { name: "Jugo de naranja", desc: "Naranja exprimida al momento.", price: "Gs 12.000", tags: "Natural", icon: "local_bar" },
        { name: "Tereré artesanal", desc: "Yerba, hielo y jugo de limón o naranja.", price: "Gs 10.000", tags: "Paraguay", icon: "sports_bar" },
        { name: "Chocolate caliente", desc: "Cacao artesanal con leche entera y crema.", price: "Gs 18.000", tags: "Reconfortante", icon: "coffee" },
        { name: "Agua mineral", desc: "Con o sin gas, botella 500 ml.", price: "Gs 6.000", tags: "Natural", icon: "water_drop" },
        { name: "Mate cocido", desc: "Tradicional paraguayo con leche o solo.", price: "Gs 8.000", tags: "Casa", icon: "local_cafe" },
      ],
    },
    dulces: {
      label: "Dulces",
      items: [
        { name: "Tarta de manzana", desc: "Manzana caramelizada, hojaldre, helado de vainilla.", price: "Gs 26.000", tags: "Estrella", icon: "cake" },
        { name: "Mil hojas", desc: "Hojaldre crocante, crema pastelera, azúcar glas.", price: "Gs 24.000", tags: "Francés", icon: "cake" },
        { name: "Eclair de chocolate", desc: "Choux relleno, glaseado de chocolate.", price: "Gs 18.000", tags: "Clásico", icon: "cake" },
        { name: "Macarons", desc: "Caja de seis sabores rotativos.", price: "Gs 35.000", tags: "Caja", icon: "cookie" },
        { name: "Pastafrola de membrillo", desc: "Receta abuela. Masa quebrada y dulce de membrillo.", price: "Gs 22.000", tags: "Casera", icon: "cake" },
        { name: "Kaa-He'e (postre del país)", desc: "Mousse de mamón con miel de caña.", price: "Gs 24.000", tags: "Casa", icon: "icecream" },
      ],
    },
  },

  testimonials: [
    { quote: "El mejor café que probé en Ñemby. Las medialunas son una obra de arte y el ambiente te transporta a otra época.", name: "María Fernández", meta: "Cliente desde 2022" },
    { quote: "La sopa paraguaya recién hecha y un café con leche. La tradición servida con todo el cariño. Vuelvo cada sábado.", name: "Carlos Benítez", meta: "Vecino del barrio" },
    { quote: "Vinimos a desayunar y nos quedamos toda la mañana. Cada detalle pensado. Los croissants son adictivos.", name: "Lucía Acosta", meta: "Visitante de Asunción" },
  ],

  gallery: [
    { label: "Salón principal", className: "tall", img: "https://images.unsplash.com/photo-1554118811-1e0d58224f24?w=600&h=900&fit=crop&auto=format" },
    { label: "Vitrina del día", className: "", img: "https://images.unsplash.com/photo-1565958011703-44f9829ba187?w=600&h=400&fit=crop&auto=format" },
    { label: "Café especial", className: "", img: "https://images.unsplash.com/photo-1509042239860-f550ce710b93?w=600&h=400&fit=crop&auto=format" },
    { label: "Mesa al sol", className: "wide", img: "https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=1000&h=400&fit=crop&auto=format" },
    { label: "Medialunas", className: "", img: "https://images.unsplash.com/photo-1555507036-ab1f4038808a?w=600&h=400&fit=crop&auto=format" },
    { label: "Detalle de fachada", className: "tall", img: "https://images.unsplash.com/photo-1559925393-8be0ec4767c8?w=600&h=900&fit=crop&auto=format" },
    { label: "Mostrador", className: "", img: "https://images.unsplash.com/photo-1517433670267-08bbd4be890f?w=600&h=400&fit=crop&auto=format" },
    { label: "Chipa de almidón", className: "", img: "https://images.unsplash.com/photo-1612929633738-8fe44f7ec841?w=600&h=400&fit=crop&auto=format" },
    { label: "Tarta del día", className: "wide", img: "https://images.unsplash.com/photo-1562967916-eb82221dfb92?w=1000&h=400&fit=crop&auto=format" },
    { label: "Rincón lectura", className: "", img: "https://images.unsplash.com/photo-1521017432531-fbd92d768814?w=600&h=400&fit=crop&auto=format" },
  ],

  hours: [
    { day: "Lunes — Viernes", time: "07:00 — 21:00" },
    { day: "Sábado", time: "08:00 — 22:00" },
    { day: "Domingo", time: "08:00 — 18:00" },
  ],

  marquee: [
    "Café de origen", "Pan artesanal", "Recién horneado cada mañana",
    "Chipa caliente todos los días", "Desde 2023", "Ñemby — Paraguay",
    "@bom.paincafebar", "Atendido por sus dueños", "Reservas por WhatsApp",
  ],
};

window.BPData = BPData;

// ─── Live menu loader (fetches real data from app.indexte.com) ────────────────
const ICON_BY_CAT = {
  cafe:      'local_cafe',
  minutas:   'bakery_dining',
  almuerzos: 'lunch_dining',
  almuerzo:  'lunch_dining',
  bebidas:   'local_bar',
  dulces:    'cake',
  panaderia: 'bakery_dining',
  tipicas:   'breakfast_dining',
};

function _slugify(str) {
  return str
    .toLowerCase()
    .normalize('NFD')
    .replace(/[̀-ͯ]/g, '')
    .replace(/[^a-z0-9]+/g, '');
}

function _fmtPrice(n) {
  return 'Gs ' + String(n).replace(/\B(?=(\d{3})+(?!\d))/g, '.');
}

function _mapItem(it, iconKey) {
  return {
    id:          it.id,
    name:        it.nombre,
    desc:        it.descripcion,
    price:       it.precio ? _fmtPrice(it.precio) : '',
    tags:        it.alergenos?.length ? it.alergenos.join(', ') : '',
    iconKey:     iconKey || '',
    imagenUrl:   it.imagenUrl || null,
    platoDelDia: !!it.platoDelDia,
  };
}

async function loadBPMenu() {
  const { items, categories, subcategories = [] } = await fetch(
    'https://app.indexte.com/api/bom-pain/menu',
    { cache: 'no-store' }
  ).then(r => r.json());

  const menu = {};

  categories
    .filter(c => c.activo)
    .sort((a, b) => (a.orden ?? 0) - (b.orden ?? 0))
    .forEach(cat => {
      const slug = _slugify(cat.nombre);
      const icon = ICON_BY_CAT[slug] || 'restaurant';

      // Subcategories belonging to this category, ordered
      const catSubs = subcategories
        .filter(s => s.activo && s.categoriaId === cat.id)
        .sort((a, b) => (a.orden ?? 0) - (b.orden ?? 0))
        .map(sub => ({
          id:     sub.id,
          nombre: sub.nombre,
          icono:  sub.icono || '',
          items:  items
            .filter(it => it.activo && it.subcategoriaId === sub.id)
            .map(it => _mapItem(it, sub.icono || '')),
        }))
        ;

      // Items in this category with no subcategory assigned
      const directItems = items
        .filter(it => it.activo && it.categoriaId === cat.id && !it.subcategoriaId)
        .map(it => _mapItem(it, icon));

      menu[slug] = {
        label:         cat.nombre,
        modoVista:     !!cat.modoVista,
        subcategories: catSubs,
        directItems,
      };
    });

  // Prepend "Hoy" tab if any daily specials exist
  const daily = items.filter(it => it.activo && it.platoDelDia);
  if (daily.length > 0) {
    const withDaily = {
      daily: {
        label: '⭐ Menú del Día',
        subcategories: [],
        directItems: daily.map(it => {
          const cat = categories.find(c => c.id === it.categoriaId);
          const slug = cat ? _slugify(cat.nombre) : '';
          return { ...it, icon: ICON_BY_CAT[slug] || 'restaurant', ..._mapItem(it, ICON_BY_CAT[slug] || 'restaurant') };
        }),
      },
    };
    Object.assign(withDaily, menu);
    return withDaily;
  }

  return menu;
}

window.loadBPMenu = loadBPMenu;

// ─── Instagram posts loader ───────────────────────────────────────────────────
const IG_FALLBACK = [
  { id:'ig1', titulo:'Bom Pain', urlPost:'https://www.instagram.com/p/C9caiyqR1-v/', activo:true, orden:1 },
  { id:'ig2', titulo:'Bom Pain', urlPost:'https://www.instagram.com/p/C9nPRMVRlJj/', activo:true, orden:2 },
  { id:'ig3', titulo:'Bom Pain', urlPost:'https://www.instagram.com/p/C5ZO9hBuHF_/', activo:true, orden:3 },
  { id:'ig4', titulo:'Bom Pain', urlPost:'https://www.instagram.com/p/DVqhFm9DViO/', activo:true, orden:4 },
  { id:'ig5', titulo:'Bom Pain', urlPost:'https://www.instagram.com/p/DYCHw6IDkIK/', activo:true, orden:5 },
  { id:'ig6', titulo:'Bom Pain', urlPost:'https://www.instagram.com/p/DYP99G5A9kC/', activo:true, orden:6 },
  { id:'ig7', titulo:'Bom Pain', urlPost:'https://www.instagram.com/p/DX5PX6_DcyP/', activo:true, orden:7 },
  { id:'ig8', titulo:'Bom Pain', urlPost:'https://www.instagram.com/p/DSPkYAMD1NF/', activo:true, orden:8 },
];

async function loadBPInstagram() {
  try {
    const data = await fetch(
      'https://app.indexte.com/api/bom-pain/instagram',
      { cache: 'no-store' }
    ).then(r => r.json());
    if (!Array.isArray(data) || !data.length) return IG_FALLBACK;
    return data.filter(p => p.activo).sort((a, b) => a.orden - b.orden);
  } catch {
    return IG_FALLBACK;
  }
}
window.loadBPInstagram = loadBPInstagram;
window.IG_FALLBACK = IG_FALLBACK;

// ─── Live gallery loader ──────────────────────────────────────────────────────
async function loadBPGallery() {
  const data = await fetch(
    'https://app.indexte.com/api/bom-pain/galeria',
    { cache: 'no-store' }
  ).then(r => r.json());

  if (!Array.isArray(data) || !data.length) return null;

  return data
    .filter(g => g.activo && g.urlImagen)
    .sort((a, b) => a.orden - b.orden)
    .map(g => ({
      label: g.titulo,
      img: g.urlImagen,
      className: '',
    }));
}
window.loadBPGallery = loadBPGallery;

// ─── Live testimonials loader ─────────────────────────────────────────────────
async function loadBPTestimonials() {
  const data = await fetch(
    'https://app.indexte.com/api/bom-pain/testimonios',
    { cache: 'no-store' }
  ).then(r => r.json());

  if (!Array.isArray(data) || !data.length) return null;

  return data.map(t => ({
    quote: t.testimonio,
    name:  t.nombre,
    meta:  t.contexto,
  }));
}
window.loadBPTestimonials = loadBPTestimonials;

// ─── Live hours loader ────────────────────────────────────────────────────────
async function loadBPHours() {
  const data = await fetch(
    'https://app.indexte.com/api/bom-pain/horarios',
    { cache: 'no-store' }
  ).then(r => r.json());

  if (!Array.isArray(data) || !data.length) return null;

  return data
    .sort((a, b) => a.orden - b.orden)
    .map(h => ({
      day:    h.dia,
      time:   h.cerrado ? 'Cerrado' : `${h.horaApertura} — ${h.horaCierre}`,
      cerrado: h.cerrado,
    }));
}
window.loadBPHours = loadBPHours;
