/* ===========================================================
   PIPOQUE — Store / dados / persistência
   =========================================================== */

/* ---------- cookies (dados do cliente) ---------- */
function setCookie(name, value, days = 180) {
  try {
    const exp = new Date(Date.now() + days * 864e5).toUTCString();
    document.cookie = `${name}=${encodeURIComponent(value)}; expires=${exp}; path=/; SameSite=Lax`;
  } catch (e) {}
}
function getCookie(name) {
  try {
    const m = document.cookie.match('(?:^|; )' + name + '=([^;]*)');
    return m ? decodeURIComponent(m[1]) : null;
  } catch (e) { return null; }
}

/* ---------- localStorage helpers ---------- */
const LS = {
  get(key, fallback) {
    try { const v = localStorage.getItem(key); return v ? JSON.parse(v) : fallback; }
    catch (e) { return fallback; }
  },
  set(key, val) {
    try { localStorage.setItem(key, JSON.stringify(val)); } catch (e) {}
  }
};

const KEYS = {
  products: 'pipoque_products_v1',
  settings: 'pipoque_settings_v1',
  users: 'pipoque_users_v1',
  orders: 'pipoque_orders_v1',
  cart: 'pipoque_cart_v1',
  palette: 'pipoque-pal',
  session: 'pipoque_admin_session'
};

/* ---------- categorias ---------- */
const CATEGORIES = [
  { id: 'combos',   name: 'Combos',          em: '🎉', single: 'Combo' },
  { id: 'doces',    name: 'Pipocas Doces',   em: '🍫', single: 'Doce' },
  { id: 'salgadas', name: 'Pipocas Salgadas',em: '🧀', single: 'Salgada' },
  { id: 'bebidas',  name: 'Bebidas',         em: '🥤', single: 'Bebida' },
  { id: 'extras',   name: 'Adicionais',      em: '✨', single: 'Adicional' },
];

const FLAVOR_COLORS = ['p1', 'p2', 'p3', 'p4'];
const GLYPHS = ['🍿','🍫','🥛','🍓','🍯','🧀','🥓','🌽','🍕','🥤','🧃','💧','🥤','🍦','🎉','🎁','🍪','🌈','⭐','✨','🍬','🧁'];

/* ---------- montador "do seu jeito" ---------- */
const BUILDER = {
  sizes: [
    { id: 'p', name: 'Pequeno', desc: '200ml', price: 12, em: '🥤', maxCremes: 1 },
    { id: 'm', name: 'Médio', desc: '400ml', price: 16, em: '🍿', maxCremes: 2 },
    { id: 'g', name: 'Grande', desc: '700ml', price: 20, em: '🪣', maxCremes: 3 },
  ],
  cremes: [
    { id: 'ninho', name: 'Creme de Ninho', price: 4 },
    { id: 'choco', name: 'Chocolate', price: 4 },
    { id: 'nutella', name: 'Nutella', price: 6 },
    { id: 'brigadeiro', name: 'Brigadeiro', price: 4 },
    { id: 'morango', name: 'Morango', price: 4 },
    { id: 'caramelo', name: 'Caramelo', price: 3 },
  ],
  toppings: [
    { id: 'granulado', name: 'Granulado', price: 2 },
    { id: 'confete', name: 'Confete', price: 3 },
    { id: 'ninhopo', name: 'Ninho em pó', price: 4 },
    { id: 'marshmallow', name: 'Marshmallow', price: 4 },
    { id: 'morangopdc', name: 'Pedaços de morango', price: 5 },
    { id: 'ovomaltine', name: 'Ovomaltine', price: 4 },
  ]
};

/* ---------- formatadores ---------- */
const money = (n) => 'R$ ' + Number(n || 0).toFixed(2).replace('.', ',');
const onlyDigits = (s) => (s || '').replace(/\D/g, '');
function maskPhone(v) {
  const d = onlyDigits(v).slice(0, 11);
  if (d.length <= 2) return d;
  if (d.length <= 7) return `(${d.slice(0,2)}) ${d.slice(2)}`;
  return `(${d.slice(0,2)}) ${d.slice(2,7)}-${d.slice(7)}`;
}

/* ---------- horário de funcionamento ---------- */
const WEEKDAYS = [
  { id: 1, name: 'Segunda' },
  { id: 2, name: 'Terça' },
  { id: 3, name: 'Quarta' },
  { id: 4, name: 'Quinta' },
  { id: 5, name: 'Sexta' },
  { id: 6, name: 'Sábado' },
  { id: 0, name: 'Domingo' },
];
/* padrão: Ter–Dom abertos 14h–22h; delivery Sex/Sáb/Dom. `id` = Date.getDay() */
function defaultSchedule() {
  return WEEKDAYS.map((d) => ({
    id: d.id,
    name: d.name,
    open: d.id !== 1,
    from: '14:00',
    to: '22:00',
    delivery: d.id === 5 || d.id === 6 || d.id === 0,
  }));
}
function getSchedule(settings) {
  const sc = settings && settings.schedule;
  return Array.isArray(sc) && sc.length ? sc : defaultSchedule();
}
function deliveryDaysLabel(schedule) {
  const days = (schedule || []).filter((d) => d.open && d.delivery).map((d) => d.name);
  return days.length ? days.join(', ') : 'Sem dias de entrega';
}

/* montador: usa o configurado nas settings ou cai no padrão (BUILDER) */
function getBuilder(settings) {
  const b = settings && settings.builder;
  if (b && Array.isArray(b.sizes) && Array.isArray(b.cremes) && Array.isArray(b.toppings)) return b;
  return BUILDER;
}

/* ---------- export global ---------- */
Object.assign(window, {
  setCookie, getCookie, LS, KEYS, CATEGORIES, FLAVOR_COLORS, GLYPHS,
  BUILDER, money, onlyDigits, maskPhone,
  WEEKDAYS, defaultSchedule, getSchedule, deliveryDaysLabel, getBuilder
});
