// data.jsx — content model for Cafetería La Z · carta real (Esquel)

// price can be a number (ARS) or null → "Consultar"
const fmt = (n) => (n == null ? null : '$' + n.toLocaleString('es-AR'));

const CATEGORIES = [
  { id: 'cafe',        label: 'Cafés',            en: 'Coffee',          icon: 'coffee' },
  { id: 'especiales',  label: 'Cafés especiales', en: 'Specialty',       icon: 'star' },
  { id: 'frios',       label: 'Cafés fríos',      en: 'Cold coffee',     icon: 'cupToGo' },
  { id: 'calientes',   label: 'Mates y bebidas',  en: 'Mate & hot',      icon: 'mate' },
  { id: 'pasteleria',  label: 'Para acompañar',   en: 'To accompany',    icon: 'cookie' },
  { id: 'sanguches',   label: 'Sándwiches',       en: 'Sandwiches',      icon: 'sandwich' },
  { id: 'frias',       label: 'Frías',            en: 'Cold drinks',     icon: 'bottle' },
  { id: 'adicionales', label: 'Adicionales',      en: 'Extras',          icon: 'plus' },
];

const BASE_PRODUCTS = [
  // ── Cafés ───────────────────────────────────────────
  { id: 'espresso',         cat: 'cafe', name: 'Café espresso',                 en: 'Espresso',                vol: '60cc',  price: 2500, icon: 'coffee', tone: 'brand' },
  { id: 'espresso-largo',   cat: 'cafe', name: 'Café espresso largo',           en: 'Long espresso',           vol: '180cc', price: 3000, icon: 'coffee', tone: 'brand' },
  { id: 'americano',        cat: 'cafe', name: 'Café americano',                en: 'Americano',               vol: '240cc', price: 3500, icon: 'coffee', tone: 'brand', tag: 'Clásico' },
  { id: 'doble',            cat: 'cafe', name: 'Café doble espresso',           en: 'Double espresso',         vol: '360cc', price: 4000, icon: 'coffee', tone: 'brand' },
  { id: 'cortado',          cat: 'cafe', name: 'Espresso cortado con leche',    en: 'Espresso with milk',      vol: '',      price: 2800, icon: 'coffee', tone: 'brand' },
  { id: 'largo-cortado',    cat: 'cafe', name: 'Largo cortado con leche',       en: 'Long espresso with milk', vol: '',      price: 3300, icon: 'coffee', tone: 'brand' },
  { id: 'americano-cortado',cat: 'cafe', name: 'Americano cortado con leche',   en: 'Americano with milk',     vol: '',      price: 3800, icon: 'coffee', tone: 'brand' },
  { id: 'doble-cortado',    cat: 'cafe', name: 'Doble espresso cortado',        en: 'Double espresso w/ milk', vol: '',      price: 4500, icon: 'coffee', tone: 'brand' },
  { id: 'con-leche-240',    cat: 'cafe', name: 'Café con leche',                en: 'Coffee with milk',        vol: '240cc', price: 4000, icon: 'coffee', tone: 'brand', tag: 'Favorito' },
  { id: 'con-leche-360',    cat: 'cafe', name: 'Café con leche',                en: 'Coffee with milk',        vol: '360cc', price: 5000, icon: 'coffee', tone: 'brand' },

  // ── Cafés especiales ────────────────────────────────
  { id: 'capuccino-240',    cat: 'especiales', name: 'Capuccino',                en: 'Cappuccino',              vol: '240cc', price: 4500, icon: 'coffee', tone: 'accent', tag: 'Favorito' },
  { id: 'capuccino-360',    cat: 'especiales', name: 'Capuccino',                en: 'Cappuccino',              vol: '360cc', price: 5500, icon: 'coffee', tone: 'accent' },
  { id: 'latte-240',        cat: 'especiales', name: 'Latte',                    en: 'Latte',                   vol: '240cc', price: 4200, icon: 'coffee', tone: 'accent' },
  { id: 'latte-360',        cat: 'especiales', name: 'Latte',                    en: 'Latte',                   vol: '360cc', price: 5200, icon: 'coffee', tone: 'accent' },
  { id: 'latte-vainilla',   cat: 'especiales', name: 'Latte vainilla',           en: 'Vanilla latte',           vol: '360cc', price: 5500, icon: 'coffee', tone: 'accent' },
  { id: 'latte-caramel',    cat: 'especiales', name: 'Latte caramel',            en: 'Caramel latte',           vol: '360cc', price: 5500, icon: 'coffee', tone: 'accent' },
  { id: 'latte-choco',      cat: 'especiales', name: 'Latte chocoavellana',      en: 'Hazelnut chocolate latte',vol: '360cc', price: 5800, icon: 'coffee', tone: 'accent', tag: 'Estrella' },
  { id: 'submarino',        cat: 'especiales', name: 'Submarino',                en: 'Hot chocolate',           vol: '360cc', price: 5500, icon: 'coffee', tone: 'accent', desc: 'Leche caliente y barra de chocolate.' },

  // ── Cafés fríos ─────────────────────────────────────
  { id: 'latte-caramel-frio',  cat: 'frios', name: 'Latte caramel frío',  en: 'Iced caramel latte',  vol: 'Frío', price: 6500, icon: 'cupToGo', tone: 'lake' },
  { id: 'latte-vainilla-frio', cat: 'frios', name: 'Latte vainilla frío', en: 'Iced vanilla latte',  vol: 'Frío', price: 6500, icon: 'cupToGo', tone: 'lake' },
  { id: 'cafe-tonic',          cat: 'frios', name: 'Café tónic',          en: 'Coffee tonic',        vol: 'Frío', price: 7000, icon: 'cupToGo', tone: 'lake', tag: 'Refrescante' },

  // ── Mates y otras bebidas calientes ─────────────────
  { id: 'te',            cat: 'calientes', name: 'Té',                en: 'Tea',                    vol: '',      price: 2500, icon: 'mate', tone: 'forest' },
  { id: 'tes-sabor',     cat: 'calientes', name: 'Tés saborizados',   en: 'Flavored teas',          vol: '',      price: 3000, icon: 'mate', tone: 'forest' },
  { id: 'mate-cocido',   cat: 'calientes', name: 'Mate cocido',       en: 'Tea-bagged mate',        vol: '',      price: 2500, icon: 'mate', tone: 'forest' },
  { id: 'servicio-mate', cat: 'calientes', name: 'Servicio de mate',  en: 'Mate service',           vol: '',      price: 3500, icon: 'mate', tone: 'forest', tag: 'Bien patagónico', desc: 'Mate, yerba y termo con agua caliente.' },
  { id: 'vaso-leche',    cat: 'calientes', name: 'Vaso de leche',     en: 'Glass of milk',          vol: '240cc', price: 3000, icon: 'bottle', tone: 'forest' },
  { id: 'chocolatada',   cat: 'calientes', name: 'Chocolatada',       en: 'Chocolate milk',         vol: '240cc', price: 4000, icon: 'bottle', tone: 'forest' },
  { id: 'agua-caliente', cat: 'calientes', name: 'Agua caliente',     en: 'Hot water',              vol: '',      price: 1000, icon: 'mate', tone: 'forest' },

  // ── Para acompañar (alfajores + sánguches de miga) ──
  { id: 'alfajor-rosa',  cat: 'pasteleria', name: 'Alfajor Rosa de los vientos', en: 'Rosa de los vientos alfajor', vol: 'Artesanal', price: 6500, icon: 'cookie', tone: 'gold', tag: 'Artesanal' },
  { id: 'alfajor-ankatu',cat: 'pasteleria', name: 'Alfajor Ankatu',              en: 'Ankatu alfajor',              vol: 'Artesanal', price: 4500, icon: 'cookie', tone: 'gold' },
  { id: 'medialunas-jq', cat: 'pasteleria', name: 'Medialunas de jamón y queso', en: 'Ham & cheese croissants',     vol: 'Miga',      price: 4200, icon: 'sandwich', tone: 'gold' },
  { id: 'chips-jq',      cat: 'pasteleria', name: 'Chips de jamón y queso',      en: 'Ham & cheese chips',          vol: 'Miga',      price: 4500, icon: 'sandwich', tone: 'gold' },

  // ── Sánguches y comidas ─────────────────────────────
  { id: 'mila-carne', cat: 'sanguches', name: 'Sánguche de milanesa de carne', en: 'Beef milanesa sandwich',  vol: '', price: 10500, icon: 'sandwich', tone: 'forest', tag: 'Para el viaje', desc: 'Lechuga, tomate, jamón, queso, huevo duro y mayonesa.' },
  { id: 'mila-pollo', cat: 'sanguches', name: 'Sánguche de milanesa de pollo', en: 'Chicken milanesa sandwich', vol: '', price: 11000, icon: 'sandwich', tone: 'forest' },

  // ── Frías (gaseosas + jugos) ────────────────────────
  { id: 'coca',   cat: 'frias', name: 'Coca-Cola',  en: 'Coca-Cola',     vol: '500ml', price: 3000, icon: 'bottle', tone: 'lake' },
  { id: 'sprite', cat: 'frias', name: 'Sprite',     en: 'Sprite',        vol: '500ml', price: null, icon: 'bottle', tone: 'lake' },
  { id: 'fanta',  cat: 'frias', name: 'Fanta',      en: 'Fanta',         vol: '500ml', price: null, icon: 'bottle', tone: 'lake' },
  { id: 'ades',   cat: 'frias', name: 'Ades',       en: 'Ades soy juice',vol: '',      price: null, icon: 'bottle', tone: 'lake' },
  { id: 'cepita', cat: 'frias', name: 'Cepita',     en: 'Cepita juice',  vol: '',      price: null, icon: 'bottle', tone: 'lake' },

  // ── Adicionales ─────────────────────────────────────
  { id: 'ad-leche', cat: 'adicionales', name: 'Adicional leche',          en: 'Extra milk',         vol: '', price: 500,  icon: 'plus', tone: 'brand' },
  { id: 'ad-coco',  cat: 'adicionales', name: 'Adicional leche de coco',  en: 'Coconut milk',       vol: '', price: 1500, icon: 'plus', tone: 'brand' },
];

// "Combos viajero" — sugerencias armadas con productos reales (se piden en mostrador)
const BASE_COMBOS = [
  { id: 'combo-trochita', name: 'Combo Trochita', for: 'Para subir a La Trochita', tone: 'accent', icon: 'train', tag: 'El más pedido',
    items: ['con-leche-360', 'medialunas-jq', 'alfajor-ankatu'] },
  { id: 'combo-alerces', name: 'Combo Alerces', for: 'Para un día de bosque', tone: 'forest', icon: 'leaf',
    items: ['americano', 'mila-carne', 'alfajor-rosa'] },
  { id: 'combo-lahoya', name: 'Combo La Hoya', for: 'Para la nieve', tone: 'lake', icon: 'snow',
    items: ['submarino', 'chips-jq', 'latte-choco'] },
  { id: 'combo-mochilero', name: 'Combo Mochilero', for: 'Para el camino largo', tone: 'gold', icon: 'bag',
    items: ['servicio-mate', 'mila-pollo', 'alfajor-ankatu'] },
];

const BASE_ACTIVITIES = [
  { id: 'alerces', name: 'Parque Nacional Los Alerces', en: 'Los Alerces National Park', icon: 'leaf', tone: 'forest',
    meta: 'A 45 min · UNESCO', blurb: 'Bosques milenarios, lagos turquesa y senderos para todo el día.',
    recs: ['americano', 'mila-carne', 'alfajor-rosa'], comboId: 'combo-alerces' },
  { id: 'trochita', name: 'La Trochita', en: 'The Old Patagonian Express', icon: 'train', tone: 'accent',
    meta: 'Salidas desde Esquel', blurb: 'El viejo expreso patagónico, un tren a vapor histórico.',
    recs: ['submarino', 'medialunas-jq', 'alfajor-ankatu'], comboId: 'combo-trochita' },
  { id: 'lahoya', name: 'Cerro La Hoya', en: 'La Hoya Ski Center', icon: 'snow', tone: 'lake',
    meta: 'A 20 min · Temporada', blurb: 'Esquí, nieve y vistas de toda la cordillera cerca del pueblo.',
    recs: ['submarino', 'chips-jq', 'latte-choco'], comboId: 'combo-lahoya' },
  { id: 'miradores', name: 'Miradores y senderos', en: 'Lookouts & trails', icon: 'trail', tone: 'brand',
    meta: 'Alrededores de Esquel', blurb: 'Vistas del valle y caminatas cortas para estirar las piernas.',
    recs: ['latte-240', 'mila-pollo', 'alfajor-ankatu'], comboId: null },
  { id: 'excursiones', name: 'Excursiones y trekking', en: 'Day trips & trekking', icon: 'mountain', tone: 'dusk',
    meta: 'Medio día / día completo', blurb: 'Salidas guiadas por la cordillera y la estepa patagónica.',
    recs: ['cafe-tonic', 'mila-pollo', 'te'], comboId: 'combo-mochilero' },
  { id: 'pesca', name: 'Pesca con mosca', en: 'Fly fishing', icon: 'fish', tone: 'gold',
    meta: 'Ríos y lagos', blurb: 'Aguas patagónicas famosas entre pescadores de todo el mundo.',
    recs: ['servicio-mate', 'medialunas-jq', 'latte-caramel-frio'], comboId: 'combo-mochilero' },
];

// ── Nosotros ────────────────────────────────────────
const BASE_NOSOTROS = {
  intro: {
    title: 'Cafetería La Z',
    body: {
      es: 'Nacimos en la Terminal de Esquel con una idea simple: que cada viajero arranque su recorrido patagónico con el mejor café. Somos un equipo familiar apasionado por el buen sabor, la pastelería casera y la atención de verdad. Desde el primer espresso de la mañana hasta el último mate de la tarde, estamos acá para hacerte la espera más rica.',
      en: 'We were born at the Esquel bus terminal with a simple idea: that every traveler should start their Patagonian journey with the best coffee. We are a family team passionate about great flavor, homemade pastries, and genuine hospitality. From the first espresso of the morning to the last mate of the afternoon, we are here to make your wait more delicious.',
    },
    since: {
      es: 'En el corazón de la Terminal de Esquel',
      en: 'At the heart of Esquel\'s bus terminal',
    },
  },
  stories: [
    { id: 's1', date: 'Junio 2025',
      title: { es: 'Nueva carta de invierno', en: 'New winter menu' },
      body: { es: 'Incorporamos el submarino de barrita artesanal y los nuevos mates de hierbas patagónicas. Vení a probarlos antes de tu próximo viaje.', en: 'We added the artisan chocolate submarino and new Patagonian herbal mates. Come try them before your next trip.' },
    },
    { id: 's2', date: 'Mayo 2025',
      title: { es: '¡Gracias por el cariño!', en: 'Thank you for your support!' },
      body: { es: 'Superamos las 500 reseñas en Google y no podemos estar más agradecidos. Cada visita nos motiva a seguir mejorando.', en: 'We passed 500 Google reviews and couldn\'t be more grateful. Every visit motivates us to keep improving.' },
    },
  ],
  photos: [],
  reviews: [
    { id: 'r1', name: 'Lucía M.', stars: 5, text: 'El mejor café de toda la terminal. El latte chocoavellana es increíble, lo recomiendo siempre.' },
    { id: 'r2', name: 'Rodrigo P.', stars: 5, text: 'Atención súper amable y rápida. Ideal para tomar algo antes del colectivo sin perder tiempo.' },
    { id: 'r3', name: 'Ana K.', stars: 5, text: 'Los alfajores artesanales son una joya. Los compro siempre que paso por Esquel.' },
  ],
};

const BASE_HOURS = [
  { d: 'Lunes a viernes', h: '07:00 – 22:00' },
  { d: 'Sábados', h: '07:30 – 22:00' },
  { d: 'Domingos y feriados', h: '08:00 – 21:00' },
];

const BASE_PLACE = {
  name: 'Cafetería La Z',
  addr: 'Av. Alvear 1801',
  inside: 'Dentro de la Terminal de Ómnibus de Esquel',
  city: 'Esquel · Chubut · Patagonia',
  // keyless Google Maps embed + directions
  embed: 'https://www.google.com/maps?q=Terminal+de+Omnibus+Esquel+Alvear+1801&z=16&output=embed',
  dir: 'https://www.google.com/maps/dir/?api=1&destination=Terminal+de+Omnibus+de+Esquel+Alvear+1801',
};

// Minimal i18n for chrome text. Product/activity names stay as-is.
const STR = {
  es: {
    open: 'Abierto ahora', closes: 'cierra 22:00', terminal: 'Terminal de Esquel · Alvear 1801',
    tagline: 'Tu parada en Esquel\nantes de seguir viaje.',
    heroSub: 'Café de especialidad, mates y pastelería casera. A pasos de tu plataforma, en el corazón de la Patagonia.',
    seeMenu: 'Ver la carta', combosCta: 'Combos viajero', whatToDo: '¿Qué hacer en Esquel?', where: 'Dónde estamos',
    featured: 'Lo más pedido', forTheRoad: 'Para el camino',
    quick: 'Accesos rápidos', menu: 'La carta', combosTitle: 'Combos viajero', combosSub: 'Ideas para llevar y seguir viaje. Se arman en el mostrador.',
    esquelTitle: '¿Qué hacer en Esquel?', esquelSub: 'Antes de salir, pasá a buscar lo tuyo.',
    placeTitle: 'Dónde estamos', hoursTitle: 'Horarios', howTitle: 'Cómo llegar', directions: 'Cómo llegar',
    recommend: 'Te recomendamos', back: 'Volver', approx: 'aprox.', askCounter: 'Pedilo en el mostrador',
    consult: 'Consultar', pickupNote: 'Pedís y retirás en el mostrador. Sin apuro antes de tu colectivo.',
    tabs: ['Inicio', 'Carta', 'Esquel', 'Lugar', 'Nosotros'],
    orderTitle: 'Tu pedido', orderNote: 'Acercate al mostrador con lo que elegiste y te lo preparamos al momento.',
    storiesTitle: 'Novedades', reviewsTitle: 'Lo que dicen', reviewsWrite: 'Dejá tu reseña',
    reviewName: 'Tu nombre', reviewText: 'Contanos tu experiencia...', reviewSend: 'Publicar', reviewThanks: '¡Gracias por tu reseña!',
    nosotrosEyebrow: 'Quiénes somos',
  },
  en: {
    open: 'Open now', closes: 'closes 10 PM', terminal: 'Esquel Terminal · Alvear 1801',
    tagline: 'Your stop in Esquel\nbefore the road.',
    heroSub: 'Specialty coffee, mate and homemade pastries. Steps from your platform, in the heart of Patagonia.',
    seeMenu: 'See the menu', combosCta: 'Traveler combos', whatToDo: 'What to do in Esquel?', where: 'Find us',
    featured: 'Most ordered', forTheRoad: 'For the road',
    quick: 'Quick access', menu: 'Menu', combosTitle: 'Traveler combos', combosSub: 'Ideas to grab & go. Built at the counter.',
    esquelTitle: 'What to do in Esquel?', esquelSub: 'Before you head out, grab yours.',
    placeTitle: 'Find us', hoursTitle: 'Hours', howTitle: 'How to get here', directions: 'Directions',
    recommend: 'We recommend', back: 'Back', approx: 'approx.', askCounter: 'Order at the counter',
    consult: 'Ask us', pickupNote: 'Order and pick up at the counter. No rush before your bus.',
    tabs: ['Home', 'Menu', 'Esquel', 'Place', 'About'],
    orderTitle: 'Your order', orderNote: 'Come to the counter with what you chose and we\'ll prepare it right away.',
    storiesTitle: 'News', reviewsTitle: 'What people say', reviewsWrite: 'Leave a review',
    reviewName: 'Your name', reviewText: 'Tell us about your experience...', reviewSend: 'Submit', reviewThanks: 'Thanks for your review!',
    nosotrosEyebrow: 'About us',
  },
};

// ── Merge panel overrides (from localStorage) onto the base content ──
const _ov = (typeof loadOverrides === 'function') ? loadOverrides() : {};

const PROD_FIELDS = ['name', 'en', 'desc', 'vol', 'tag', 'photo'];
function applyProduct(base, ov) {
  if (!ov) return base;
  const m = { ...base };
  PROD_FIELDS.forEach(k => { if (k in ov) m[k] = ov[k]; });
  if ('price' in ov) m.price = ov.price;
  if (ov.hidden) m.hidden = true;
  return m;
}

const PRODUCTS = BASE_PRODUCTS
  .map(p => applyProduct(p, _ov.products && _ov.products[p.id]))
  .concat(_ov.custom || [])
  .filter(p => !p.hidden);

const COMBOS = BASE_COMBOS
  .map(c => {
    const ov = _ov.combos && _ov.combos[c.id];
    if (!ov) return c;
    return { ...c, ...['name', 'for', 'items'].reduce((a, k) => (k in ov ? (a[k] = ov[k], a) : a), {}), hidden: ov.hidden };
  })
  .concat(_ov.customCombos || [])
  .filter(c => !c.hidden);

const ACTIVITIES = BASE_ACTIVITIES
  .map(a => {
    const ov = _ov.activities && _ov.activities[a.id];
    if (!ov) return a;
    return { ...a, ...['name', 'en', 'meta', 'blurb', 'photo'].reduce((o, k) => (k in ov ? (o[k] = ov[k], o) : o), {}), hidden: ov.hidden };
  })
  .filter(a => !a.hidden);

const HOURS = (_ov.hours && _ov.hours.length) ? _ov.hours : BASE_HOURS;
const PLACE = { ...BASE_PLACE, ...(_ov.place || {}) };
const TEASER_PHOTO = _ov.teaserPhoto || null;
const _nov = _ov.nosotros || {};
const NOSOTROS = {
  intro: {
    title: BASE_NOSOTROS.intro.title,
    body: { ...BASE_NOSOTROS.intro.body, ...(_nov.intro?.body || {}) },
    since: { ...BASE_NOSOTROS.intro.since, ...(_nov.intro?.since || {}) },
  },
  stories: (_nov.stories && _nov.stories.length) ? _nov.stories : BASE_NOSOTROS.stories,
  photos: (_nov.photos) || BASE_NOSOTROS.photos,
  reviews: BASE_NOSOTROS.reviews,
};

const productById = (id) => PRODUCTS.find(p => p.id === id) || COMBOS.find(c => c.id === id)
  || BASE_PRODUCTS.find(p => p.id === id) || BASE_COMBOS.find(c => c.id === id);
const comboTotal = (c) => c.items.reduce((s, id) => { const p = productById(id); return s + (p && p.price ? p.price : 0); }, 0);

Object.assign(window, {
  fmt, CATEGORIES, PRODUCTS, COMBOS, ACTIVITIES, HOURS, PLACE, TEASER_PHOTO, STR, productById, comboTotal,
  BASE_PRODUCTS, BASE_COMBOS, BASE_ACTIVITIES, BASE_HOURS, BASE_PLACE, NOSOTROS, BASE_NOSOTROS,
});
