// js/components/widgets/marcas/FichaMarca.jsx
// [Wave 30 v224.11 NUCLEAR EXTRACT 2026-05-24] 591L → ~190L (-67%)
// Padrão Wave 15/27/28/29 cravado (5ª replicação). 5 extracts (1 lib + 4 widgets).
//
// Ficha 360° da marca — modal full-screen com 8 tabs consolidadas em 3 sections.
//
// Props: brand, products, sales, clients, purchases, suppliers, allUsers, onClose
// Deps runtime widgets: PeriodFilterBar (Wave 3.5), marcasHelpers (Wave 4), calcs (Wave 30)
// Deps runtime ZNX.widgets.fichaMarca: TabsHeaderBar + ResumoCatalogoSection + VendasClientesSection + EstoqueComprasGeoAlertasSection
(function() {
  'use strict';
  const {useState, useMemo} = React;

  // [Wave 30 v224.11 + v224.55 2026-05-28] vars+check MOVED to component body (preventivo)
  // regra_validacao_helpers_runtime_quando_ordem_scripts_uncertain

  function FichaMarca({brand, products, sales, clients, purchases, suppliers, allUsers, onClose}){
    // [v224.55 FIX-PREV-22 2026-05-28] vars+check em render time
    const PeriodFilterBar = window.ZNX && window.ZNX.widgets && window.ZNX.widgets.PeriodFilterBar;
    const MH = window.ZNX && window.ZNX.marcasHelpers;
    const calcs = window.ZNX && window.ZNX.fichaMarca && window.ZNX.fichaMarca.calcs;
    const fmW = (window.ZNX && window.ZNX.widgets && window.ZNX.widgets.fichaMarca) || {};
    // regra_estender_bloco_refs_fail_loud — 1 msg agregada (8 refs total)
    if(!PeriodFilterBar || !MH || !calcs || !fmW.TabsHeaderBar || !fmW.ResumoCatalogoSection || !fmW.VendasClientesSection || !fmW.EstoqueComprasGeoAlertasSection){
      const _msg = '[FichaMarca v224.11 wave30] deps faltando: PeriodFilterBar='+!!PeriodFilterBar+', marcasHelpers='+!!MH+', calcs='+!!calcs+', TabsHeaderBar='+!!fmW.TabsHeaderBar+', ResumoCatalogoSection='+!!fmW.ResumoCatalogoSection+', VendasClientesSection='+!!fmW.VendasClientesSection+', EstoqueComprasGeoAlertasSection='+!!fmW.EstoqueComprasGeoAlertasSection;
      console.error(_msg);
      if(window.Sentry && typeof window.Sentry.captureMessage==='function'){
        window.Sentry.captureMessage(_msg,'error');
      }
    }
    const diasSince = MH && MH.diasSince;
    const [period,setPeriod] = useState('all');
    const [customStart,setCustomStart] = useState('');
    const [customEnd,setCustomEnd] = useState('');
    const [tab,setTab] = useState('resumo');

    // ────── 14 useMemo wrappers via calcs factories (ZERO mudança lógica) ──────
    const filteredSales = useMemo(function(){return calcs.computeFilteredSales(sales, period, customStart, customEnd);}, [sales,period,customStart,customEnd]);
    const m = useMemo(function(){return calcs.computeM(brand.name, filteredSales, products);}, [brand.name,filteredSales,products]);
    const mLifetime = useMemo(function(){return calcs.computeMLifetime(brand.name, sales, products);}, [brand.name,sales,products]);
    const brandProducts = useMemo(function(){return calcs.computeBrandProducts(products, brand.name);}, [products,brand.name]);
    const allBrandsRevenue = useMemo(function(){return calcs.computeAllBrandsRevenue(filteredSales, products);}, [filteredSales,products]);
    const abcAll = useMemo(function(){return calcs.computeAbcAll(allBrandsRevenue);}, [allBrandsRevenue]);
    const abcMine = abcAll.find(function(x){return x.name===brand.name.toUpperCase();});
    const topSkus = useMemo(function(){return calcs.computeTopSkus(m);}, [m]);
    const skusParados = useMemo(function(){return calcs.computeSkusParados(brandProducts, m);}, [brandProducts,m]);
    const topClientes = useMemo(function(){return calcs.computeTopClientes(filteredSales, products, brand.name, clients);}, [filteredSales,products,brand.name,clients]);
    const geoStats = useMemo(function(){return calcs.computeGeoStats(filteredSales, products, brand.name, clients);}, [filteredSales,products,brand.name,clients]);
    const vendedorasDaMarca = useMemo(function(){return calcs.computeVendedorasDaMarca(m);}, [m]);
    const estoque = useMemo(function(){return calcs.computeEstoque(brandProducts, m, period);}, [brandProducts,m,period]);
    const comprasMarca = useMemo(function(){return calcs.computeComprasMarca(purchases, brandProducts);}, [purchases,brandProducts]);
    const tendencia12m = useMemo(function(){return calcs.computeTendencia12m(mLifetime);}, [mLifetime]);

    // ────── Derived values (LITERAL FichaMarca L87-184) ──────
    const recurringClients = topClientes.filter(function(c){return c.pedidos>=2;}).length;
    const repurchaseRate = topClientes.length>0?(recurringClients/topClientes.length*100):0;
    const concentTop1 = topClientes[0]&&m.receita>0?(topClientes[0].receita/m.receita*100):0;
    const maxTend = Math.max(1, ...tendencia12m.map(function(t){return t.receita;}));

    const thisMonth = (function(){const d=new Date();return d.getFullYear()+'-'+String(d.getMonth()+1).padStart(2,'0');})();
    const lastMonth = (function(){const d=new Date();d.setMonth(d.getMonth()-1);return d.getFullYear()+'-'+String(d.getMonth()+1).padStart(2,'0');})();
    const sameMonthLastYear = (function(){const d=new Date();d.setFullYear(d.getFullYear()-1);return d.getFullYear()+'-'+String(d.getMonth()+1).padStart(2,'0');})();
    const mom = mLifetime.monthStats[lastMonth]>0?((mLifetime.monthStats[thisMonth]||0)-mLifetime.monthStats[lastMonth])/mLifetime.monthStats[lastMonth]*100:null;
    const yoy = mLifetime.monthStats[sameMonthLastYear]>0?((mLifetime.monthStats[thisMonth]||0)-mLifetime.monthStats[sameMonthLastYear])/mLifetime.monthStats[sameMonthLastYear]*100:null;

    // Alertas (LITERAL L163-172)
    const alertas = [];
    const diasUlt = diasSince(mLifetime.lastSaleDate);
    if(diasUlt>90) alertas.push({tipo:'critico',msg:'Sem venda há '+diasUlt+' dias — marca dormente'});
    else if(diasUlt>30) alertas.push({tipo:'aviso',msg:'Sem venda há '+diasUlt+' dias'});
    if(estoque.parado.length>0) alertas.push({tipo:'aviso',msg:estoque.parado.length+' SKU(s) com estoque parado (sem venda 60+ dias)'});
    if(estoque.baixo.length>0) alertas.push({tipo:'info',msg:estoque.baixo.length+' SKU(s) com baixo estoque (≤5 un)'});
    if(concentTop1>=30) alertas.push({tipo:'critico',msg:'Concentração de risco: '+(topClientes[0] && topClientes[0].name)+' = '+concentTop1.toFixed(0)+'% das vendas desta marca'});
    if(m.margemPct>0&&m.margemPct<15) alertas.push({tipo:'aviso',msg:'Margem baixa: '+m.margemPct.toFixed(1)+'% (saudável >25%)'});
    if(mom!==null&&mom<-20) alertas.push({tipo:'aviso',msg:'Vendas caíram '+Math.abs(mom).toFixed(0)+'% mês a mês'});

    // Score (LITERAL L175-184)
    let score = 100;
    if(diasUlt>90) score-=40;
    else if(diasUlt>30) score-=15;
    if(m.margemPct<15) score-=15;
    if(estoque.parado.length>3) score-=10;
    if(concentTop1>=50) score-=15;
    if(mom!==null&&mom<-20) score-=10;
    score = Math.max(0,score);
    const scoreColor = score>=75?'#15803D':score>=50?'#B89840':'#B91C1C';
    const scoreLabel = score>=75?'Saudável':score>=50?'Atenção':'Crítica';

    const tabs = [
      {id:'resumo',l:'Resumo',ico:'📊'},
      {id:'catalogo',l:'Catálogo',ico:'📦'},
      {id:'vendas',l:'Vendas',ico:'💰'},
      {id:'clientes',l:'Clientes',ico:'👥'},
      {id:'estoque',l:'Estoque',ico:'📦'},
      {id:'compras',l:'Compras',ico:'🛒'},
      {id:'geovend',l:'Geo + Vendedoras',ico:'📍'},
      {id:'alertas',l:'Alertas',ico:'⚠️',badge:alertas.length}
    ];

    return (
      <div style={{position:'fixed',inset:0,background:'rgba(15,27,54,0.85)',zIndex:9999,display:'flex',flexDirection:'column',padding:20,boxSizing:'border-box'}}>
        {fmW.TabsHeaderBar && (
          <fmW.TabsHeaderBar
            brand={brand} brandProducts={brandProducts} abcMine={abcMine}
            score={score} scoreColor={scoreColor} scoreLabel={scoreLabel}
            tab={tab} setTab={setTab} tabs={tabs} onClose={onClose}
          />
        )}

        {/* Body scrollable */}
        <div style={{background:'#F8FAFB',borderRadius:'0 0 14px 14px',padding:'20px 24px',overflowY:'auto',flex:1}}>
          {/* Filtro de período visível em todas as tabs exceto alertas/catalogo */}
          {tab!=='alertas'&&tab!=='catalogo'&&(
            <PeriodFilterBar period={period} setPeriod={setPeriod} customStart={customStart} setCustomStart={setCustomStart} customEnd={customEnd} setCustomEnd={setCustomEnd}/>
          )}

          {/* Tabs resumo + catalogo (extraído pra ResumoCatalogoSection) */}
          {(tab==='resumo'||tab==='catalogo') && fmW.ResumoCatalogoSection && (
            <fmW.ResumoCatalogoSection
              tab={tab} m={m} mLifetime={mLifetime} brand={brand}
              brandProducts={brandProducts} topSkus={topSkus} skusParados={skusParados}
              tendencia12m={tendencia12m} maxTend={maxTend}
              mom={mom} yoy={yoy} diasUlt={diasUlt}
            />
          )}

          {/* Tabs vendas + clientes (extraído pra VendasClientesSection) */}
          {(tab==='vendas'||tab==='clientes') && fmW.VendasClientesSection && (
            <fmW.VendasClientesSection
              tab={tab} m={m} topClientes={topClientes}
              recurringClients={recurringClients} repurchaseRate={repurchaseRate} concentTop1={concentTop1}
              filteredSales={filteredSales} brand={brand} products={products}
            />
          )}

          {/* Tabs estoque + compras + geovend + alertas (extraído pra EstoqueComprasGeoAlertasSection) */}
          {(tab==='estoque'||tab==='compras'||tab==='geovend'||tab==='alertas') && fmW.EstoqueComprasGeoAlertasSection && (
            <fmW.EstoqueComprasGeoAlertasSection
              tab={tab} estoque={estoque} comprasMarca={comprasMarca}
              geoStats={geoStats} vendedorasDaMarca={vendedorasDaMarca}
              brand={brand} m={m} alertas={alertas}
              brandProducts={brandProducts} suppliers={suppliers}
            />
          )}
        </div>
      </div>
    );
  }

  // ─── EXPORT ───
  window.ZNX = window.ZNX || {};
  window.ZNX.widgets = window.ZNX.widgets || {};
  window.ZNX.widgets.FichaMarca = FichaMarca;
  // [Wave 30 marker v224.11] confirma extract executado
  window.FichaMarca_v224_11_wave30 = true;
})();
