// 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, });