// js/components/widgets/OrcamentosCancelInsights.jsx
// Dashboard de Análise de Cancelamento — Onda V2 (R$133k visibility).
// Criado em 2026-05-06 (sistema 4 onda V2 fase 4).
// [Wave 37 v224.18 NUCLEAR EXTRACT 2026-05-24] 357L -> ~95L (-73%) · 12ª replicação NUCLEAR
// Padrão NUCLEAR pure-orchestrator EXTREMO espelho Wave 33 ProdutoTimeline (-71.8%)
// PRIVACY v223.32+v223.33 cravado: isVendedor branch preservado LITERAL.
//
// KPIs:
//   - Total R$ cancelado (mês corrente, último 30d, total acumulado)
//   - % cancelamento (vs total de orçamentos)
//   - Ticket médio cancelado
//
// Cards:
//   - Top motivos (bar chart com qty + R$)
//   - Ranking vendedora (tabela com qty, R$, ticket, % cancelamento; alerta vermelho >30%)
//   - Linha do tempo últimos 30 dias (sparkline)
//
// Props:
//   quotes: array de orçamentos (todos status)
//   sales: array de vendas (opcional)
//   userRole: 'admin'|'vendedor'|'financeiro'|etc — pra privacy branch
//
// Deps runtime globals: fmt (window.fmt)
// Deps Wave 37: ZNX.lib['orcamentos-cancel-insights'].calcs + ZNX.widgets['orcamentos-cancel-insights'].{
//   CancelHeader, CancelKPIs, CancelTopMotivos, CancelRanking, CancelTimeline}
(function() {
  'use strict';
  const {useMemo} = React;

  // [Wave 37 v224.18 + v224.54 2026-05-28] vars+check MOVED to component body (ERP-5N false positive)

  function OrcamentosCancelInsights({quotes, sales, userRole}) {
    // [v224.54 FIX-5N 2026-05-28] vars+check em render time
    const ociW = (window.ZNX && window.ZNX.widgets && window.ZNX.widgets['orcamentos-cancel-insights']) || {};
    const ociCalcs = window.ZNX && window.ZNX.lib && window.ZNX.lib['orcamentos-cancel-insights'] && window.ZNX.lib['orcamentos-cancel-insights'].calcs;
    if(!ociCalcs || !ociW.CancelHeader || !ociW.CancelKPIs || !ociW.CancelTopMotivos || !ociW.CancelRanking || !ociW.CancelTimeline){
      const _msg = '[OrcamentosCancelInsights v224.18 wave37] deps faltando: calcs='+!!ociCalcs+', CancelHeader='+!!ociW.CancelHeader+', CancelKPIs='+!!ociW.CancelKPIs+', CancelTopMotivos='+!!ociW.CancelTopMotivos+', CancelRanking='+!!ociW.CancelRanking+', CancelTimeline='+!!ociW.CancelTimeline;
      console.error(_msg);
      if(window.Sentry && typeof window.Sentry.captureMessage === 'function') window.Sentry.captureMessage(_msg, 'error');
    }
    // [v223.32 PRIVACY] Vendedora vê só ranking nomes+posições (sem R$/qty/%) — Opção D Jamal 2026-05-19
    const isVendedor = userRole === 'vendedor';

    // [Wave 37 v224.18] useMemo data via lib (era inline L30-127 · 98L extraídos)
    const data = useMemo(() => ociCalcs.buildCancelData(quotes), [quotes]);

    const fmt = window.fmt;
    const TAXA_ALERTA = ociCalcs ? ociCalcs.TAXA_ALERTA : 30;

    return (
      <div style={{ display: 'flex', flexDirection: 'column', gap: 18 }}>
        {ociW.CancelHeader && <ociW.CancelHeader isVendedor={isVendedor}/>}
        {ociW.CancelKPIs && <ociW.CancelKPIs data={data} isVendedor={isVendedor}/>}
        {ociW.CancelTopMotivos && <ociW.CancelTopMotivos data={data} isVendedor={isVendedor}/>}
        {ociW.CancelRanking && <ociW.CancelRanking data={data} isVendedor={isVendedor} TAXA_ALERTA={TAXA_ALERTA}/>}
        {ociW.CancelTimeline && <ociW.CancelTimeline data={data} isVendedor={isVendedor}/>}

        {/* [LITERAL L329-343] Footer recomendações · PRIVACY: só admin · preserved inline */}
        {!isVendedor && data.totalRsCancelado > 0 && (
          <div style={{
            background: '#FEF3C7', border: '1px solid #FCD34D', borderRadius: 10,
            padding: '14px 18px', fontSize: 13, color: '#78350F',
          }}>
            💡 <strong>Recuperar 30% disso = +{fmt(data.totalRsCancelado * 0.3)}.</strong>
            {data.ranking.length > 0 && data.ranking[0].cancelPct > TAXA_ALERTA && (
              <span> Atenção em <strong>{data.ranking[0].seller}</strong> ({data.ranking[0].cancelPct.toFixed(1)}% de cancelamento).</span>
            )}
            {data.topMotivos.length > 0 && (
              <span> Motivo #1: <strong>{data.topMotivos[0].motivo}</strong> ({data.topMotivos[0].qty} casos).</span>
            )}
          </div>
        )}
      </div>
    );
  }

  // Namespace
  window.ZNX = window.ZNX || {};
  window.ZNX.components = window.ZNX.components || {};
  window.ZNX.components.OrcamentosCancelInsights = OrcamentosCancelInsights;
  window.OrcamentosCancelInsights = OrcamentosCancelInsights;

  // Marca onda V2 fase 4
  window.ZNX.refactor_phase_5_loaded = window.ZNX.refactor_phase_5_loaded || {};
  window.ZNX.refactor_phase_5_loaded.OrcamentosCancelInsights = true;
  // [Wave 37 marker v224.18] confirma extract executado
  window.OrcamentosCancelInsights_v224_18_wave37 = true;
})();
