// ─────────────────────────────────────────────────────────────────────────────
// data.jsx — LAYER DATI (collegato al backend, con refresh).
//
// Sostituisce l'originale CLAUDE_DESIGN/data.jsx. Espone gli STESSI simboli
// globali (STORES, ARTICLES, CUSTOMERS, CATALOG, buildCatalog, ...), ma:
//   • la sorgente è window.__BOOTSTRAP__ (iniettato dal backend);
//   • i simboli sono messi su window (NON come `const` di primo livello), così
//     window.__BI_REFRESH__() può riassegnarli dopo una scrittura e tutti i
//     componenti, ri-renderizzati, vedono i dati aggiornati (niente refresh pagina).
//   • config statica (COLOR_HEX/COLOR_CODE/STORE) e derivati (CATALOG/buildCatalog)
//     restano identici alla logica dell'originale.
// ─────────────────────────────────────────────────────────────────────────────

(function () {
  // ── Config statica (1:1 dall'originale) ───────────────────────────────────
  window.COLOR_HEX = {
    'Navy': '#1B3A52', 'Charcoal': '#3A3733', 'Bianco': '#F5F1E8', 'Nero': '#14110F',
    'Beige': '#C9B89A', 'Cammello': '#A3825C', 'Cognac': '#7A4F2B', 'Grigio': '#8A857E',
    'Cremisi': '#7E2A2F', 'Verde bosco': '#314A3A', 'Avorio': '#EDE3D1', 'Tabacco': '#6E4E2E',
  };
  window.COLOR_CODE = {
    'Navy': 'NV', 'Charcoal': 'CH', 'Bianco': 'WH', 'Nero': 'NR', 'Beige': 'BG', 'Cammello': 'CM',
    'Cognac': 'CG', 'Grigio': 'GR', 'Cremisi': 'CR', 'Verde bosco': 'VB', 'Avorio': 'AV', 'Tabacco': 'TB',
  };
  // Negozio "corrente" di contesto (config) — letterale come nell'originale.
  window.STORE = { name: 'Roma Spagna', id: 'roma-spagna', address: 'Via dei Condotti 24', cashier: 'Giulia Moretti', shiftStart: '10:00' };

  // ── Derivati (stessa logica dell'originale, ma leggono window.* freschi) ──
  function deriveCatalog() {
    const ARTICLES = window.ARTICLES || [];
    const STORE = window.STORE;
    const COLOR_CODE = window.COLOR_CODE;
    const out = [];
    for (const a of ARTICLES) {
      const storeStock = a.stock[STORE.id] || {};
      for (const c of a.colors) {
        for (const s of a.sizes) {
          const qty = storeStock[c]?.[s] ?? 0;
          out.push({
            sku: `${a.id}-${COLOR_CODE[c] || 'XX'}-${s}`,
            name: a.name, brand: a.brand, cat: a.cat,
            color: c, size: s, price: a.prices[STORE.id] ?? a.basePrice,
            stock: qty, articleId: a.id,
          });
        }
      }
    }
    return out;
  }

  window.buildCatalog = function (storeId) {
    const ARTICLES = window.ARTICLES || [];
    const STORES = window.STORES || [];
    const COLOR_CODE = window.COLOR_CODE;
    const out = [];
    for (const a of ARTICLES) {
      for (const c of a.colors) {
        for (const s of a.sizes) {
          let qty, price;
          if (storeId === 'all') {
            qty = STORES.reduce((tot, st) => tot + (a.stock[st.id]?.[c]?.[s] ?? 0), 0);
            price = a.basePrice;
          } else {
            qty = a.stock[storeId]?.[c]?.[s] ?? 0;
            price = a.prices[storeId] ?? a.basePrice;
          }
          out.push({
            sku: `${a.id}-${COLOR_CODE[c] || 'XX'}-${s}`,
            name: a.name, brand: a.brand, cat: a.cat,
            color: c, size: s, price, stock: qty, articleId: a.id,
          });
        }
      }
    }
    return out;
  };

  // ── Applica un payload bootstrap ai global (chiamabile più volte) ─────────
  const KEYS = [
    'STORES', 'ROLES', 'PAYMENT_TERMS', 'ARTICLES', 'CUSTOMERS', 'SUPPLIERS',
    'MOVEMENTS', 'INVENTORY_ROWS', 'TRANSFERS', 'TRANSFER_LINES', 'REQUESTS', 'REQUEST_LINES', 'TIMECLOCK', 'LISTS', 'DOCUMENTS',
    'TODAY', 'HOURLY', 'TOP_CATEGORIES', 'RECENT_RECEIPTS', 'ALERTS',
    'TODAY_STORES', 'HOURLY_STORES', 'TOP_CATEGORIES_STORES',
    'PURCHASE_ORDERS', 'PURCHASE_ORDER_LINES', 'DELIVERY_ORDERS', 'DELIVERY_ORDER_LINES',
    'SUPPLIER_RETURNS', 'SUPPLIER_RETURN_LINES', 'CUSTOMER_ORDERS', 'CUSTOMER_ORDER_LINES',
    'CUSTOMER_RESERVES', 'CUSTOMER_RESERVE_LINES', 'CUSTOMER_INVOICES', 'CUSTOMER_INVOICE_LINES',
    'SCADENZE_INITIAL', 'DDT_CLIENTI', 'DDT_CLIENTI_LINES',
    'SUPPLIER_INVOICES', 'SUPPLIER_INVOICE_LINES', 'SUPPLIER_CREDIT_NOTES', 'SUPPLIER_CREDIT_NOTE_LINES',
  ];
  const MAP_KEYS = new Set([
    'TRANSFER_LINES', 'REQUEST_LINES', 'PURCHASE_ORDER_LINES', 'DELIVERY_ORDER_LINES', 'SUPPLIER_RETURN_LINES',
    'CUSTOMER_ORDER_LINES', 'CUSTOMER_RESERVE_LINES', 'CUSTOMER_INVOICE_LINES', 'DDT_CLIENTI_LINES',
    'SUPPLIER_INVOICE_LINES', 'SUPPLIER_CREDIT_NOTE_LINES', 'TODAY', 'TODAY_STORES', 'HOURLY_STORES',
    'TOP_CATEGORIES_STORES', 'LISTS',
  ]);

  window.__BI_APPLY__ = function (B) {
    B = B || {};
    for (const k of KEYS) {
      window[k] = B[k] != null ? B[k] : (MAP_KEYS.has(k) ? {} : []);
    }
    window.CATALOG = deriveCatalog();
  };

  // ── Refresh: rifetcha il bootstrap dal backend, riapplica, re-render ──────
  window.__BI_REFRESH__ = async function () {
    let r;
    try { r = await fetch('/api/bootstrap', { credentials: 'same-origin' }); }
    catch (e) { return; }
    if (r.status === 401) { if (window.__BI_ON_401__) window.__BI_ON_401__(); return; }
    if (!r.ok) return;
    const B = await r.json();
    window.__BOOTSTRAP__ = B;
    window.__BI_APPLY__(B);
    if (window.__BI_RERENDER__) window.__BI_RERENDER__();
  };

  // Applica subito i dati iniettati nella pagina.
  window.__BI_APPLY__(window.__BOOTSTRAP__ || {});
})();
