// js/components/widgets/VendedorActivityCard.jsx
// Card "📊 Atividade da Equipe" — Onda 4c (sistema 4).
// Mostra disparos, conversões, taxa e top template por vendedora nos últimos 7 dias.
// [Wave 39 v224.20 NUCLEAR EXTRACT 2026-05-24] 239L -> ~95L (-60%) · 14ª replicação NUCLEAR
// Padrão NUCLEAR pure-orchestrator fetch+UI (Wave 35 ComissaoVendedora espelho + UI expansion state)
//
// Visível apenas pra admin/financeiro (segurança via RLS já garante leitura completa de outreach).
//
// Lógica:
//   - Query outreach últimos 7 dias
//   - Query sales últimos 14 dias (pra capturar conversões até 7d após disparo mais antigo)
//   - Cross-reference: cliente comprou em ≤7d depois do disparo? = conversão
//   - Agrupa por vendedora_name
//   - Lista vendedoras com role='vendedor' que não dispararam → ZERO
//
// Deps runtime globals: sb, fmt
// Deps Wave 39: ZNX.lib['vendedor-activity-card'].calcs + ZNX.widgets['vendedor-activity-card'].{
//   ActivityHeader, ActivityTable, ActivityWarningBanner}
(function() {
  'use strict';
  const {useState, useEffect, useMemo} = React;

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

function VendedorActivityCard({allUsers, user}){
  // [v224.55 FIX-PREV-16 2026-05-28] vars+check em render time
  const vacW = (window.ZNX && window.ZNX.widgets && window.ZNX.widgets['vendedor-activity-card']) || {};
  const vacCalcs = window.ZNX && window.ZNX.lib && window.ZNX.lib['vendedor-activity-card'] && window.ZNX.lib['vendedor-activity-card'].calcs;
  if(!vacCalcs || !vacW.ActivityHeader || !vacW.ActivityTable || !vacW.ActivityWarningBanner){
    const _msg = '[VendedorActivityCard v224.20 wave39] deps faltando: calcs='+!!vacCalcs+', ActivityHeader='+!!vacW.ActivityHeader+', ActivityTable='+!!vacW.ActivityTable+', ActivityWarningBanner='+!!vacW.ActivityWarningBanner;
    console.error(_msg);
    if(window.Sentry && typeof window.Sentry.captureMessage === 'function') window.Sentry.captureMessage(_msg, 'error');
  }
  const[outreaches,setOutreaches]=useState([]);
  const[sales,setSales]=useState([]);
  const[loading,setLoading]=useState(true);
  const[error,setError]=useState(null);
  const[expandedVendedora,setExpandedVendedora]=useState(null);

  // Carrega outreach + sales últimos 7d/14d
  useEffect(()=>{
    if(user?.role!=='admin'&&user?.role!=='financeiro')return;
    const sevenDaysAgo=new Date();sevenDaysAgo.setDate(sevenDaysAgo.getDate()-7);
    const fourteenDaysAgo=new Date();fourteenDaysAgo.setDate(fourteenDaysAgo.getDate()-14);
    Promise.all([
      sb.from('client_outreach').select('client_id,vendedora_name,template_id,sent_at,message_sent').gte('sent_at',sevenDaysAgo.toISOString()).order('sent_at',{ascending:false}),
      // [4c-fix] sales table não tem coluna total — usa subtotal_before_credit + frete + embalagem - global_discount - credit_applied como aproximação
      sb.from('sales').select('id,client_id,created_at,status,subtotal_before_credit,credit_applied,frete,embalagem,global_discount').gte('created_at',fourteenDaysAgo.toISOString())
    ]).then(([or,sa])=>{
      if(or.error)throw or.error;
      if(sa.error)throw sa.error;
      setOutreaches(or.data||[]);
      setSales(sa.data||[]);
      setLoading(false);
    }).catch(e=>{
      console.warn('[ZNX] VendedorActivity load fail:',e.message);
      setError(e.message);
      setLoading(false);
    });
  },[user?.role]);

  // [Wave 39 v224.20] stats + totals via lib (era useMemo inline L49-113 · 65L extraídos)
  const stats = useMemo(()=>vacCalcs.buildStats(outreaches, sales, allUsers), [outreaches, sales, allUsers]);
  const totals = useMemo(()=>vacCalcs.buildTotals(stats), [stats]);

  // Renderização condicional por role (PRIVACY preservado LITERAL)
  if(user?.role!=='admin'&&user?.role!=='financeiro')return null;

  if(loading){
    return(
      <div className="card" style={{marginBottom:16}}>
        <div style={{fontSize:14,fontWeight:700,color:'#9CA3AF'}}>📊 Atividade da Equipe — últimos 7 dias</div>
        <div style={{padding:20,textAlign:'center',color:'#6B7280',fontSize:13}}>Carregando...</div>
      </div>
    );
  }
  if(error){
    return(
      <div className="card" style={{marginBottom:16,border:'1px solid #DC262633'}}>
        <div style={{fontSize:14,fontWeight:700,color:'#DC2626'}}>⚠️ Atividade da Equipe — erro</div>
        <div style={{fontSize:12,color:'#6B7280',marginTop:6}}>{error}</div>
      </div>
    );
  }

  const hasZero=stats.some(v=>v.disparos===0);

  return(
    <div className="card" style={{marginBottom:16}}>
      {vacW.ActivityHeader && <vacW.ActivityHeader totals={totals}/>}
      {stats.length===0?(
        <div style={{padding:20,textAlign:'center',color:'#6B7280',fontSize:13}}>
          Nenhuma vendedora cadastrada. Cadastre vendedoras em Configurações → Usuários.
        </div>
      ):(
        vacW.ActivityTable && <vacW.ActivityTable stats={stats} expandedVendedora={expandedVendedora} setExpandedVendedora={setExpandedVendedora} TEMPLATE_LABELS={vacCalcs.TEMPLATE_LABELS}/>
      )}
      {vacW.ActivityWarningBanner && <vacW.ActivityWarningBanner hasZero={hasZero}/>}
    </div>
  );
}

  // Namespace
  window.ZNX = window.ZNX || {};
  window.ZNX.widgets = window.ZNX.widgets || {};
  window.ZNX.widgets.VendedorActivityCard = VendedorActivityCard;
  window.VendedorActivityCard = VendedorActivityCard;
  // [Wave 39 marker v224.20] confirma extract executado
  window.VendedorActivityCard_v224_20_wave39 = true;
})();
