// Sprint 1D: productos se cargan desde /api/products.
// Colores, imágenes y metadatos de display se mantienen aquí (no están en la BD).

const ASSET = './assets'

const CATEGORIES = [
  { id: 'combos',    label: 'Combos' },
  { id: 'jugos',     label: 'Jugos Verdes' },
  { id: 'complementos', label: 'Complementos' },
  { id: 'frutas',    label: 'Frutas' },
  { id: 'verduras',  label: 'Verduras' },
  { id: 'proteinas', label: 'Proteínas' },
]

const CITIES    = ['Cali', 'Jamundí', 'Palmira', 'Yumbo', 'Poblado Campestre']
// Adobos para filetes sueltos. Para reactivar uno, quítalo de MARINADOS_INACTIVOS
// (no se borra el valor, solo se oculta del selector).
const MARINADOS_TODOS = ['Sin adobo', 'Adobo verde', 'Adobo pimentón', 'Adobo miel mostaza', 'Adobo pesto']
const MARINADOS_INACTIVOS = ['Adobo pimentón', 'Adobo miel mostaza', 'Adobo pesto']
const MARINADOS = MARINADOS_TODOS.filter((m) => !MARINADOS_INACTIVOS.includes(m))

// Metadatos visuales — no van a la BD, viven aquí
const COLOR_MAP = {
  'Melón':       'var(--eo-orange)',  'Maracuyá':  'var(--eo-yellow)',
  'Papaya':      'var(--eo-red)',     'Sandía':    'var(--eo-magenta)',
  'Uvas':        'var(--eo-purple)',  'Fresas':    'var(--eo-red)',
  'Mango':       'var(--eo-orange)',  'Piña':      'var(--eo-yellow)',
  'Kiwi':        'var(--eo-lime)',    'Coco':      'var(--eo-slate-500)',
  'Arándanos':   'var(--eo-purple)',  'Pitahaya':  'var(--eo-magenta)',
  'Mora':        'var(--eo-purple)',  'Uchuvas':   'var(--eo-orange)',
  'Limón':       'var(--eo-lime)',    'Lulo':      'var(--ok)',
  'Zanahoria':   'var(--eo-orange)',  'Brócoli':   'var(--eo-lime)',
  'Espinaca':    'var(--ok)',
  'Cebolla cabezona': 'var(--eo-cream)', 'Cebolla morada': 'var(--eo-purple)', 'Cebolla larga': 'var(--ok)',
  'Pimentón':    'var(--eo-red)',     'Habichuela':'var(--eo-lime)',
  'Tomate milano':    'var(--eo-red)', 'Tomate chonto para guiso': 'var(--eo-red)',
  'Pepino':      'var(--ok)',         'Lechuga crespa': 'var(--eo-lime)',
  'Repollo':     'var(--ok)',         'Apio':      'var(--eo-lime)',
  'Remolacha':   'var(--eo-magenta)', 'Papitas tipo francesas':'var(--eo-cream)',
  'Coliflor':    'var(--eo-cream)',   'Zucchini':  'var(--ok)',
  'Maicitos':    'var(--eo-yellow)',  'Champiñones':'var(--eo-slate-300)',
  'Arveja':      'var(--eo-lime)',
  'Filete de pechuga de pollo':              'var(--eo-yellow)',
  'Filete de lomo de cerdo':                 'var(--eo-rose)',
  'Filete de bola de res':                   'var(--eo-red)',
  'Filete de punta de anca':                 'var(--eo-red)',
  'Filete de salmón':                        'var(--eo-orange)',
  'Cuadritos de pechuga marinados':          'var(--eo-yellow)',
  'Cuadritos de pierna de cerdo marinados':  'var(--eo-rose)',
  'Cuadritos de ampolleta de res marinados': 'var(--eo-red)',
  'Huevos AAA x30': 'var(--eo-cream)', 'Huevos AAA x15': 'var(--eo-cream)',
  'Súper Óptimo':        'var(--eo-orange)',
  'Mega Óptimo':         'var(--eo-sky)',
  'Óptimo Proteína x15': 'var(--eo-rose)',
  'Óptimo Proteína x30': 'var(--eo-rose)',
  'Óptimo de la semana': 'var(--eo-lime)',
  'Óptimo tranqui':      'var(--eo-sky)',
  'Óptimo Feliz':        'var(--eo-orange)',
  'Óptimo Abundante':    'var(--eo-purple)',
  'Óptimo Fruta y Verdura x15': 'var(--eo-lime)',
  'Óptimo Fruta y Verdura x24': 'var(--ok)',
  'Aderezo de cilantro': 'var(--eo-lime)',
  // Verduras/frutas solo-combo y opciones de adobo
  'Ajo':            'var(--eo-cream)',   'Cherry':         'var(--eo-red)',
  'Granadilla':     'var(--eo-lime)',    'Guanábana':      'var(--ok)',
  'Sin adobo':      'var(--eo-slate-300)','Adobo verde':   'var(--ok)',
  'Adobo pimentón': 'var(--eo-red)',
  // Jugos verdes
  'Jugos Verdes x10 + Limón': 'var(--eo-lime)',
  'Jugos Verdes x15 + Limón': 'var(--ok)',
  'Jugos Verdes x30 + Limón': 'var(--eo-lime)',
  // Complementos
  '10 arepas de tela':                       'var(--eo-cream)',
  'Pan de campo tajado':                     'var(--eo-cream)',
  'Mantequillitas Colanta x10':              'var(--eo-yellow)',
  'Pandebonos saludables x20u (congelado)':  'var(--eo-orange)',
  'Almojábanas saludables x20u (congelado)': 'var(--eo-cream)',
  'Arequipito Alpina x3':                    'var(--eo-orange)',
  '1000g Yogurt griego':                     'var(--eo-sky)',
  '500g Yogurt griego':                      'var(--eo-sky)',
  '500g de queso mozzarella':                'var(--eo-yellow)',
  '1 kg arroz premium ó pasta':              'var(--eo-cream)',
  'Aceite de oliva botella de vidrio 750ml': 'var(--eo-lime)',
}

const IMG_MAP = {
  'Melón':    `${ASSET}/jar-melon.png`,    'Maracuyá': `${ASSET}/jar-maracuya.png`,
  'Papaya':   `${ASSET}/jar-papaya.png`,   'Sandía':   `${ASSET}/jar-sandia.png`,
  'Uvas':     `${ASSET}/jar-uvas.png`,
}

const COMBO_META = {
  'Súper Óptimo': {
    badge:'Domicilio incluido', serves:'15 recipientes · 15 filetes · despensa completa',
    includes:['Aderezo de cilantro de obsequio'],
    pantry:['1 cubeta de huevos AAA x30','10 arepas de tela','1 pan campesino tajado',
            'Queso mozzarella rallado','500 g de yogur griego','Salchichas rancheras picaditas','1 kg de arroz o pasta'],
  },
  'Mega Óptimo': {
    badge:'Domicilio incluido', serves:'25 recipientes · 25 filetes · despensa doble',
    includes:['Aderezo de cilantro de obsequio'],
    pantry:['2 cubetas de huevos AAA x30','10 arepas de tela','2 pan campesino tajado',
            '900 g de queso mozzarella rallado','1000 g de yogur griego','Salchichas rancheras picaditas','1 kg de arroz o pasta'],
  },
  'Óptimo Proteína x15': { badge:'Domicilio incluido', serves:'15 filetes surtidos · incluye 1 salmón', includes:[] },
  'Óptimo Proteína x30': { badge:'Domicilio incluido', serves:'30 filetes surtidos · incluye 1 salmón', includes:[] },
  'Óptimo de la semana': { badge:'Domicilio incluido', serveNote:'Ideal para 1 persona', serves:'5 fruta · 5 verdura · 10 filetes de pollo',
    includes:['Aderezo de cilantro de obsequio'] },
  'Óptimo tranqui':      { badge:'Domicilio incluido', serves:'10 fruta · 8 verdura · 5 filetes de pollo',
    includes:['Aderezo de cilantro de obsequio'] },
  'Óptimo Feliz':        { badge:'Domicilio incluido', featured:true, serves:'8 fruta · 5 verdura · 21 filetes surtidos',
    includes:['Aderezo de cilantro de obsequio'] },
  'Óptimo Abundante':    { badge:'Domicilio incluido', serves:'15 fruta · 15 verdura · 62 filetes surtidos',
    includes:['Aderezo de cilantro de obsequio'] },
  'Óptimo Fruta y Verdura x15': { badge:'Domicilio incluido', serves:'15 recipientes de fruta o verdura · a tu gusto', includes:[] },
  'Óptimo Fruta y Verdura x24': { badge:'Domicilio incluido', serves:'24 recipientes de fruta o verdura · a tu gusto', includes:[] },
}

// Cómo mostrar cada pool en el configurador de combos
const SLOT_DISPLAY = {
  recipientes: { id:'recip', label:'Recipientes de fruta o verdura', sub:'Lavados y porcionados', unit:'recipientes' },
  filetes:     { id:'fil',   label:'Filetes de proteína',            sub:'Porción de 160g',       unit:'filetes' },
}

// Transforma la respuesta plana de la API en la forma que espera el frontend
function buildEOData(apiProducts) {
  const FRUTAS    = []
  const VERDURAS  = []
  const PROTEINAS = []
  const JUGOS     = []
  const COMPLEMENTOS = []
  const COMBOS    = []

  for (const p of apiProducts) {
    const base = {
      id:    p.id,
      name:  p.name,
      price: p.price,
      color: COLOR_MAP[p.name] || 'var(--eo-magenta)',
      ...(IMG_MAP[p.name] ? { img: IMG_MAP[p.name] } : {}),
    }
    if (p.category === 'frutas')    { FRUTAS.push(base); continue }
    if (p.category === 'verduras')  { VERDURAS.push({ ...base, veg: true }); continue }
    if (p.category === 'proteinas') { PROTEINAS.push({ ...base, aliño: !!p.aliño }); continue }
    if (p.category === 'jugos')     { JUGOS.push({ ...base, unit: 'Jugos verdes', jugo: true }); continue }
    if (p.category === 'complementos') { COMPLEMENTOS.push({ ...base, unit: 'Complemento' }); continue }
    if (p.category === 'combos') {
      const slots = (p.combo_slots || []).map(s => ({
        ...(SLOT_DISPLAY[s.pool_name] || { id: s.pool_name, label: s.pool_name, sub:'', unit: s.pool_name }),
        qty:  s.max_items,
        pool: s.pool_name,
      }))
      COMBOS.push({ ...base, combo: true, slots, ...(COMBO_META[p.name] || {}) })
    }
  }

  const BY_ID = {}
  ;[...FRUTAS, ...VERDURAS, ...PROTEINAS, ...JUGOS, ...COMPLEMENTOS, ...COMBOS].forEach(p => { BY_ID[p.id] = p })

  function comboPool(poolName) {
    if (poolName === 'recipientes') return [
      ...FRUTAS.map(p => ({ ...p, group: 'Frutas' })),
      ...VERDURAS.map(p => ({ ...p, group: 'Verduras', veg: true })),
    ]
    if (poolName === 'filetes') return PROTEINAS
      .filter(p => !p.name.startsWith('Huevos'))
      .map(p => ({ ...p, group: p.aliño ? 'Filetes' : 'Cuadritos' }))
    return []
  }

  const colorFor = (name) => COLOR_MAP[name] || 'var(--eo-magenta)'
  const imgFor   = (name) => IMG_MAP[name] || null

  return { CATEGORIES, CITIES, MARINADOS, FRUTAS, VERDURAS, PROTEINAS, JUGOS, COMPLEMENTOS, COMBOS, ASSET, BY_ID, comboPool, colorFor, imgFor }
}

window.eoMoney = (n) => '$' + n.toLocaleString('es-CO')

// Domicilio: si el pedido incluye al menos un combo, va incluido ($0) en
// cualquier ciudad. Si NO hay combo, se cobra por ciudad: Cali $12.000, resto
// $15.000. El servidor es la fuente de verdad al crear el pedido — esto es
// solo para mostrar en la interfaz.
window.EO_DELIVERY_CALI  = 12000
window.EO_DELIVERY_OTRAS = 15000
window.computeTotals = (items, city) => {
  let subtotal = 0
  for (const line of items) subtotal += line.product.price * line.qty
  const hasItems = items.length > 0
  const hasCombo = items.some((line) => line.product.combo)
  const isCali = (city || '').trim().toLowerCase() === 'cali'
  const delivery = (hasItems && !hasCombo)
    ? (isCali ? window.EO_DELIVERY_CALI : window.EO_DELIVERY_OTRAS)
    : 0
  return { subtotal, delivery, total: subtotal + delivery }
}

// Estado inicial vacío — App.jsx espera EO_READY antes de renderizar
window.EO_DATA = { CATEGORIES, CITIES, MARINADOS, FRUTAS:[], VERDURAS:[], PROTEINAS:[], JUGOS:[], COMPLEMENTOS:[], COMBOS:[], ASSET, BY_ID:{}, comboPool:() => [] }

window.EO_READY = fetch('/api/products')
  .then(r => {
    if (!r.ok) throw new Error(`HTTP ${r.status}`)
    return r.json()
  })
  .then(({ data }) => {
    window.EO_DATA = buildEOData(data)
    return window.EO_DATA
  })
  .catch(err => {
    console.error('[EO Market] Error cargando productos desde la API:', err)
    // Si la API falla, EO_DATA queda vacío pero la app igual renderiza
    return window.EO_DATA
  })
