// Seed catalog + order data for the prototype.
// Spanish, Venezuelan market, Esika/L'Bel/Cyzone/Yanbal inspired.

const CATALOGOS = ['Esika', "L'Bel", 'Cyzone', 'Yanbal', 'Natura', 'Avon'];
const ZONAS = ['Valencia', 'Caracas', 'Santa Rita', 'Turmero', 'La Victoria', 'Mariara'];
const EMPAQUES = ['Unidad', 'Set', 'Pack'];

// A plausible seed catalog — codes mimic the 5-digit patterns in the real app.
const CATALOGO_DATA = [
  { codigo: '40821', catalogo: 'Esika', nombre: 'Perfume Vibranza', descripcion: 'Eau de parfum 50ml', precio: 28.90, tipo: 'Unidad', pagina: 12, tono: 'rose' },
  { codigo: '40735', catalogo: 'Esika', nombre: 'Labial Pro Matte', descripcion: 'Acabado mate larga duración', precio: 9.50, tipo: 'Unidad', pagina: 48, tono: 'wine' },
  { codigo: '40912', catalogo: 'Esika', nombre: 'Base HD Perfect', descripcion: 'Cobertura media · tono 3N', precio: 14.20, tipo: 'Unidad', pagina: 22, tono: 'beige' },
  { codigo: '41102', catalogo: 'Esika', nombre: 'Set Regalo Vibranza', descripcion: 'Perfume + crema corporal', precio: 38.00, tipo: 'Set', pagina: 13, tono: 'rose' },
  { codigo: '32051', catalogo: "L'Bel", nombre: 'Orage Eau de Toilette', descripcion: 'Fragancia masculina 100ml', precio: 42.00, tipo: 'Unidad', pagina: 6, tono: 'navy' },
  { codigo: '32118', catalogo: "L'Bel", nombre: 'Crema Antiedad Nutraceutics', descripcion: 'Día · piel mixta', precio: 46.50, tipo: 'Unidad', pagina: 28, tono: 'cream' },
  { codigo: '32207', catalogo: "L'Bel", nombre: 'Pulseau Eau de Parfum', descripcion: 'Floral frutal 50ml', precio: 39.00, tipo: 'Unidad', pagina: 8, tono: 'rose' },
  { codigo: '32311', catalogo: "L'Bel", nombre: 'Set Pulseau Completo', descripcion: 'EDP + body lotion + mini', precio: 58.00, tipo: 'Set', pagina: 9, tono: 'rose' },
  { codigo: '20441', catalogo: 'Cyzone', nombre: 'Rubor Pop Cheeks', descripcion: 'Rubor en polvo compacto', precio: 7.80, tipo: 'Unidad', pagina: 34, tono: 'peach' },
  { codigo: '20512', catalogo: 'Cyzone', nombre: 'Máscara Crazy Lashes', descripcion: 'Máscara volumen extremo', precio: 8.90, tipo: 'Unidad', pagina: 52, tono: 'black' },
  { codigo: '20618', catalogo: 'Cyzone', nombre: 'Paleta Nude Art', descripcion: '12 sombras mate y shimmer', precio: 16.40, tipo: 'Unidad', pagina: 44, tono: 'beige' },
  { codigo: '20721', catalogo: 'Cyzone', nombre: 'Pink Blossom Colonia', descripcion: 'Colonia juvenil 100ml', precio: 14.90, tipo: 'Unidad', pagina: 10, tono: 'rose' },
  { codigo: '55031', catalogo: 'Yanbal', nombre: 'Unique Sensations', descripcion: 'EDP femenino 50ml', precio: 36.00, tipo: 'Unidad', pagina: 14, tono: 'wine' },
  { codigo: '55210', catalogo: 'Yanbal', nombre: 'Sérum Vitamina C', descripcion: 'Antioxidante · 30ml', precio: 32.00, tipo: 'Unidad', pagina: 26, tono: 'cream' },
  { codigo: '60108', catalogo: 'Natura', nombre: 'Ekos Castaña Body Splash', descripcion: 'Corporal hidratante', precio: 19.50, tipo: 'Unidad', pagina: 4, tono: 'beige' },
  { codigo: '60224', catalogo: 'Natura', nombre: 'Tododia Algodón', descripcion: 'Colonia 150ml', precio: 21.00, tipo: 'Unidad', pagina: 7, tono: 'cream' },
  { codigo: '75014', catalogo: 'Avon', nombre: 'Little Black Dress', descripcion: 'EDP clásico 50ml', precio: 27.00, tipo: 'Unidad', pagina: 3, tono: 'black' },
  { codigo: '75099', catalogo: 'Avon', nombre: 'Power Stay Lipstick', descripcion: '16h color · Rouge', precio: 11.80, tipo: 'Unidad', pagina: 38, tono: 'wine' },
];

// Tone → monochrome tile gradient (stylized product imagery without hand-drawn SVG)
const TONE_GRADIENT = {
  rose:  'linear-gradient(135deg, oklch(0.86 0.08 25) 0%, oklch(0.72 0.12 20) 100%)',
  wine:  'linear-gradient(135deg, oklch(0.55 0.13 20) 0%, oklch(0.35 0.1 15) 100%)',
  beige: 'linear-gradient(135deg, oklch(0.88 0.04 70) 0%, oklch(0.74 0.06 55) 100%)',
  cream: 'linear-gradient(135deg, oklch(0.94 0.03 85) 0%, oklch(0.82 0.04 75) 100%)',
  navy:  'linear-gradient(135deg, oklch(0.42 0.08 250) 0%, oklch(0.24 0.06 255) 100%)',
  peach: 'linear-gradient(135deg, oklch(0.88 0.08 55) 0%, oklch(0.74 0.12 40) 100%)',
  black: 'linear-gradient(135deg, oklch(0.35 0.01 75) 0%, oklch(0.18 0.005 75) 100%)',
};

// Map L'Bel category → tone for consistent tile gradients on fallback
const LBEL_CAT_TONE = {
  'Perfumes': 'navy',
  'Cuidado Personal': 'cream',
  'Maquillaje': 'wine',
  'Tratamiento Facial': 'beige',
  '': 'rose',
};

// Price ranges by category — plausible USD-ish values for the Venezuelan Belcorp market.
// Deterministic per código so the same product always gets the same price.
function seedPrice(codigo, categoria, nombre) {
  const name = (nombre || '').toUpperCase();
  const isSet = /^SET /.test(name) || /\bSET\b/.test(name);
  const isPromo = /^PROMO/.test(name);
  const isMini = /MINI/.test(name);
  let min = 18, max = 42;
  if (categoria === 'Perfumes') { min = 28; max = 58; }
  else if (categoria === 'Cuidado Personal') { min = 12; max = 28; }
  else if (categoria === 'Maquillaje') { min = 9; max = 22; }
  else if (categoria === 'Tratamiento Facial') { min = 24; max = 52; }
  if (isSet) { min = Math.round(min * 1.4); max = Math.round(max * 1.4); }
  if (isMini) { min = Math.round(min * 0.5); max = Math.round(max * 0.5); }
  if (isPromo) { min = 8; max = 18; }
  let h = 0;
  for (let i = 0; i < codigo.length; i++) h = (h * 31 + codigo.charCodeAt(i)) >>> 0;
  const r = (h % 1000) / 1000;
  const val = min + r * (max - min);
  return Math.floor(val) + (r > 0.5 ? 0.9 : 0.5);
}

// Seed past orders for the dashboard/history — now referencing real L'Bel products by código so images render
const _lb = (code) => {
  const p = (window.LBEL_C07 || []).find(x => x.codigo === code);
  if (!p) return null;
  return {
    codigo: p.codigo, catalogo: "L'Bel", nombre: p.nombre,
    precio: seedPrice(p.codigo, p.categoria, p.nombre),
    empaque: /set/i.test(p.promocion) ? 'Set' : 'Unidad',
    tono: LBEL_CAT_TONE[p.categoria] ?? 'rose',
    imagen: p.imagen,
  };
};

const SEED_PEDIDOS = [
  {
    id: 'C18-042',
    codigo: 'PED-1741029482',
    fechaCreacion: new Date(2026, 3, 16, 14, 22),
    fechaEntrega: new Date(2026, 3, 17, 10, 5),
    estado: 'completado',
    enviado: true,
    productos: [
      { id: 1, codigo: '40821', catalogo: 'Esika', nombre: 'Perfume Vibranza', precio: 28.90, cantidad: 2, empaque: 'Unidad', tono: 'rose' },
      { id: 2, ..._lb('35255'), cantidad: 1 }, // Set Satin Rouge
      { id: 3, ..._lb('35282'), cantidad: 1 }, // Set Fleur Divine
    ].filter(x => x.codigo),
  },
  {
    id: 'C18-041',
    codigo: 'PED-1741022109',
    fechaCreacion: new Date(2026, 3, 14, 9, 40),
    estado: 'pendiente',
    enviado: true,
    productos: [
      { id: 1, codigo: '20618', catalogo: 'Cyzone', nombre: 'Paleta Nude Art', precio: 16.40, cantidad: 3, empaque: 'Unidad', tono: 'beige' },
      { id: 2, codigo: '20512', catalogo: 'Cyzone', nombre: 'Máscara Crazy Lashes', precio: 8.90, cantidad: 4, empaque: 'Unidad', tono: 'black' },
      { id: 3, ..._lb('01285'), cantidad: 1 }, // Fleur Divine
    ].filter(x => x.codigo),
  },
  {
    id: 'C18-039',
    codigo: 'PED-1741012038',
    fechaCreacion: new Date(2026, 3, 10, 16, 12),
    estado: 'pendiente',
    enviado: false,
    productos: [
      { id: 1, ..._lb('08192'), cantidad: 1 }, // Mithyka
      { id: 2, ..._lb('07621'), cantidad: 1 }, // Mithyka crema
    ].filter(x => x.codigo),
  },
];

// Ingest L'Bel C07 products from the CSV-derived JS
const LBEL_IMPORTED = (window.LBEL_C07 || []).map(p => {
  const isSet = /(set|promo)/i.test(p.promocion || '') || /^SET /i.test(p.nombre);
  const realPrice = window.LBEL_C07_PRICES?.[p.codigo];
  const pdfPage = window.LBEL_C07_PAGE_MAP?.[p.codigo];
  return {
    codigo: p.codigo,
    catalogo: "L'Bel",
    nombre: p.nombre,
    descripcion: p.descripcion || p.tono || '',
    precio: realPrice ?? seedPrice(p.codigo, p.categoria, p.nombre),
    precioReal: realPrice != null,
    tipo: isSet ? 'Set' : 'Unidad',
    pagina: p.pagina,
    pdfPage,
    tono: LBEL_CAT_TONE[p.categoria] ?? 'rose',
    imagen: p.imagen,
    categoria: p.categoria,
    promocion: p.promocion,
  };
});

// Merge: seed products keep their (made-up) identity, L'Bel imports coexist.
// De-dup by código, preferring real imported data.
const _byCodigo = new Map();
for (const p of CATALOGO_DATA) _byCodigo.set(p.codigo, p);
for (const p of LBEL_IMPORTED) _byCodigo.set(p.codigo, p); // imported wins
const CATALOGO_FULL = Array.from(_byCodigo.values());

Object.assign(window, {
  CATALOGOS, ZONAS, EMPAQUES,
  CATALOGO_DATA: CATALOGO_FULL,
  CATALOGO_SEED: CATALOGO_DATA,
  LBEL_IMPORTED,
  TONE_GRADIENT, SEED_PEDIDOS,
});
