// js/components/widgets/ProdutosInsightsTab.jsx
// [Wave 29 v224.10 NUCLEAR EXTRACT 2026-05-24] 535L → ~110L (-79%)
// Padrão Wave 15/27/28 cravado (4ª replicação). 5 extracts (1 lib + 4 widgets).
//
// Aba "Insights" da página de Produtos — consolida tudo que estava em
// Insights → tab Produtos + tab Marcas + parte de Estoque (sistema 4 onda P2/P3).
//
// Props: products, sales, clients (arrays do app)
// Deps runtime: fmt, isFaturada, itemNet, nid, extractBrand, saleFinalTotal
(function() {
  'use strict';
  const {useMemo, useState} = React;

  // [REFACTOR Wave 1 PR1] STitle + KCard + HBar extraídos pra widgets/insights/
  // [Wave 29 v224.10 + v224.54 2026-05-28] vars+check MOVED to component body
  // regra_validacao_helpers_runtime_quando_ordem_scripts_uncertain (ERP-5K false positive)

  function ProdutosInsightsTab({products, sales, clients}){
    // [v224.54 FIX-5K 2026-05-28] vars+check em render time
    const STitle = window.ZNX?.widgets?.STitle;
    const KCard = window.ZNX?.widgets?.KCard;
    const HBar = window.ZNX?.widgets?.HBar;
    const calcs = window.ZNX && window.ZNX.produtosInsights && window.ZNX.produtosInsights.calcs;
    const piW = (window.ZNX && window.ZNX.widgets && window.ZNX.widgets.produtosInsights) || {};
    if(!STitle || !KCard || !HBar || !calcs || !piW.FiltersBar || !piW.OverviewSection || !piW.RankingsSection || !piW.BrandsStockSection){
      const _msg = '[ProdutosInsightsTab v224.10] widgets faltando: STitle='+!!STitle+', KCard='+!!KCard+', HBar='+!!HBar+', calcs='+!!calcs+', FiltersBar='+!!piW.FiltersBar+', OverviewSection='+!!piW.OverviewSection+', RankingsSection='+!!piW.RankingsSection+', BrandsStockSection='+!!piW.BrandsStockSection;
      console.error(_msg);
      if(window.Sentry && typeof window.Sentry.captureMessage === 'function'){
        window.Sentry.captureMessage(_msg, 'error');
      }
    }
    const [section, setSection] = useState('overview');
    const [filterPeriod, setFilterPeriod] = useState('all');
    const [filterBrand, setFilterBrand] = useState('');
    const [filterSeller, setFilterSeller] = useState('');
    // [v224.110] Filtros Dead Stock · controlam computeStockHealth + UI
    const [stockWindowDays, setStockWindowDays] = useState(90); // 15/30/60/90/180
    const [stockMinUnits, setStockMinUnits] = useState(0);       // esconde produtos < N un
    const [deadSortBy, setDeadSortBy] = useState('value');       // 'value' | 'stock' | 'lastSale' | 'name'

    // ────── 12 useMemo wrappers via calcs factories (ZERO mudança lógica) ──────
    const allBrands = useMemo(function(){return calcs.computeAllBrands(products);}, [products]);
    const allSellers = useMemo(function(){return calcs.computeAllSellers(sales);}, [sales]);
    const filteredSales = useMemo(function(){return calcs.computeFilteredSales(sales, filterPeriod, filterSeller);}, [sales, filterPeriod, filterSeller]);
    const filteredProducts = useMemo(function(){return calcs.computeFilteredProducts(products, filterBrand);}, [products, filterBrand]);

    const topProducts = useMemo(function(){return calcs.computeTopProducts(filteredSales, products, filterBrand);}, [filteredSales, products, filterBrand]);
    const brandData = useMemo(function(){return calcs.computeBrandData(filteredSales, products, clients, filterBrand);}, [filteredSales, products, clients, filterBrand]);
    const stockHealth = useMemo(function(){
      return calcs.computeStockHealth(sales, filteredProducts, {daysWindow: stockWindowDays, minStock: stockMinUnits});
    }, [sales, filteredProducts, stockWindowDays, stockMinUnits]);
    const prodMomentum = useMemo(function(){return calcs.computeProdMomentum(sales, products, filterBrand, filterSeller);}, [sales, products, filterBrand, filterSeller]);
    const rendimentoDetalhado = useMemo(function(){return calcs.computeRendimentoDetalhado(filteredSales, products, filterBrand);}, [filteredSales, products, filterBrand]);
    const promoSuggestions = useMemo(function(){return calcs.computePromoSuggestions(sales, filteredProducts);}, [sales, filteredProducts]);
    const capitalPorMarca = useMemo(function(){return calcs.computeCapitalPorMarca(filteredProducts);}, [filteredProducts]);

    return (
      <div>
        {/* Sub-navegação + filtros (extraído pra FiltersBar) */}
        {piW.FiltersBar && (
          <piW.FiltersBar
            section={section} setSection={setSection}
            filterPeriod={filterPeriod} setFilterPeriod={setFilterPeriod}
            filterBrand={filterBrand} setFilterBrand={setFilterBrand} allBrands={allBrands}
            filterSeller={filterSeller} setFilterSeller={setFilterSeller} allSellers={allSellers}
            filteredSalesCount={filteredSales.length}
          />
        )}

        {/* Section overview (extraído pra OverviewSection) */}
        {section === 'overview' && piW.OverviewSection && (
          <piW.OverviewSection
            products={products}
            topProducts={topProducts}
            stockHealth={stockHealth}
            promoSuggestions={promoSuggestions}
          />
        )}

        {/* Section rankings (extraído pra RankingsSection) */}
        {section === 'rankings' && piW.RankingsSection && (
          <piW.RankingsSection topProducts={topProducts}/>
        )}

        {/* Sections stock/brands/suggestions/detailed (extraído pra BrandsStockSection) */}
        {(section === 'stock' || section === 'brands' || section === 'suggestions' || section === 'detailed') && piW.BrandsStockSection && (
          <piW.BrandsStockSection
            section={section}
            brandData={brandData}
            stockHealth={stockHealth}
            stockWindowDays={stockWindowDays} setStockWindowDays={setStockWindowDays}
            stockMinUnits={stockMinUnits} setStockMinUnits={setStockMinUnits}
            deadSortBy={deadSortBy} setDeadSortBy={setDeadSortBy}
            prodMomentum={prodMomentum}
            rendimentoDetalhado={rendimentoDetalhado}
            promoSuggestions={promoSuggestions}
            capitalPorMarca={capitalPorMarca}
          />
        )}
      </div>
    );
  }

  // Namespace
  window.ZNX = window.ZNX || {};
  window.ZNX.widgets = window.ZNX.widgets || {};
  window.ZNX.widgets.ProdutosInsightsTab = ProdutosInsightsTab;
  window.ProdutosInsightsTab = ProdutosInsightsTab;
  // [Wave 29 marker v224.10] confirma extract executado
  window.ProdutosInsightsTab_v224_10_wave29 = true;
})();
