// 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: 'frutas',    label: 'Frutas' },
  { id: 'verduras',  label: 'Verduras' },
  { id: 'proteinas', label: 'Proteínas' },
]

const CITIES    = ['Cali', 'Jamundí', 'Palmira', 'Yumbo', 'Poblado Campestre']
const MARINADOS = ['Sin aliño', '1 · Verde', '2 · Pimentón', '3 · Miel mostaza', '4 · Pesto']

// 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)',
  'Zanahoria':   'var(--eo-orange)',  'Brócoli':   'var(--eo-lime)',
  'Espinaca':    'var(--ok)',         'Cebolla':   'var(--eo-purple)',
  'Pimentón':    'var(--eo-red)',     'Habichuela':'var(--eo-lime)',
  'Tomate':      'var(--eo-red)',     'Ají dulce': 'var(--eo-orange)',
  '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)',
}

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`,     'Mega Óptimo': `${ASSET}/combo-mega-optimo.png`,
}

const COMBO_META = {
  'Súper Óptimo': {
    badge:'Incluye domicilio', serves:'Ideal para 1 ó 2 personas',
    includes:['1 cubeta de huevos AAA','10 arepas de tela','1 pan de campo tajado',
              'Queso mozzarella','500g yogurt griego','Salchichas rancheras','1kg arroz ó pasta'],
  },
  'Mega Óptimo': {
    badge:'Incluye domicilio', featured:true, serves:'Ideal para 3 ó 4 personas',
    includes:['2 cubetas de huevos AAA','10 arepas de tela','2 pan de campo tajado',
              '1000g yogurt griego','900g queso mozzarella','Salchichas rancheras','1kg arroz ó pasta'],
  },
  'Óptimo Proteína x15': { badge:'Incluye domicilio', serves:'15 filetes surtidos a elegir', includes:[] },
  'Óptimo Proteína x30': { badge:'Incluye domicilio', serves:'30 filetes surtidos a elegir', 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 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 === '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, ...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 []
  }

  return { CATEGORIES, CITIES, MARINADOS, FRUTAS, VERDURAS, PROTEINAS, COMBOS, ASSET, BY_ID, comboPool }
}

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

window.computeTotals = (items) => {
  let subtotal = 0
  let hasCombo = false
  for (const line of items) {
    subtotal += line.product.price * line.qty
    if (line.product.combo) hasCombo = true
  }
  const delivery = (items.length > 0 && !hasCombo) ? 8000 : 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:[], 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
  })
