// js/components/widgets/ComissaoVendedora.jsx
// Widget de Comissão pra vendedora — V4 (sistema 4).
// Vendedora vê: comissão provisória atual + progresso meta + histórico 3 meses.
// Criado em 2026-05-06.
// [Wave 35 v224.16 NUCLEAR EXTRACT 2026-05-24] 258L -> ~95L (-63%) · 10ª replicação NUCLEAR
// Padrão pure-orchestrator espelho Wave 33 ProdutoTimeline (-71.8%)
//
// Props:
//   user: { id (app_users.id), auth_user_id, name, role } — usa auth_user_id pra RPC
//
// Deps runtime: sb, fmtMoney (globals) + getAuthUserId/getSellerAppUserId (helpers v201)
// Deps Wave 35: ZNX.lib['comissao-vendedora'].calcs + ZNX.widgets['comissao-vendedora'].{
//   CommissionMainCard, CommissionComparison, CommissionBreakdown, CommissionHistory}
(function() {
  'use strict';
  const {useState, useEffect} = React;

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

  function ComissaoVendedora({user}) {
    // [v224.54 FIX-5P 2026-05-28] vars+check em render time
    const cvW = (window.ZNX && window.ZNX.widgets && window.ZNX.widgets['comissao-vendedora']) || {};
    const cvCalcs = window.ZNX && window.ZNX.lib && window.ZNX.lib['comissao-vendedora'] && window.ZNX.lib['comissao-vendedora'].calcs;
    if(!cvCalcs || !cvW.CommissionMainCard || !cvW.CommissionComparison || !cvW.CommissionBreakdown || !cvW.CommissionHistory){
      const _msg = '[ComissaoVendedora v224.16 wave35] deps faltando: calcs='+!!cvCalcs+', CommissionMainCard='+!!cvW.CommissionMainCard+', CommissionComparison='+!!cvW.CommissionComparison+', CommissionBreakdown='+!!cvW.CommissionBreakdown+', CommissionHistory='+!!cvW.CommissionHistory;
      console.error(_msg);
      if(window.Sentry && typeof window.Sentry.captureMessage === 'function') window.Sentry.captureMessage(_msg, 'error');
    }
    const [current, setCurrent] = useState(null);
    const [history, setHistory] = useState([]);
    const [loading, setLoading] = useState(true);
    const [error, setError] = useState(null);

    useEffect(() => {
      // RPC commission_calculate espera auth_user_id (compara com auth.uid() interno).
      // Tabela commission_payments.seller_id armazena APP_USERS.ID (após ONDA-A #7 repointar FKs).
      // [BUG-FIX 2026-05-12 v192 AUDM4] Histórico aparecia VAZIO porque query usava sellerAuthId
      // (auth_user_id) em vez de user.id (app_users.id).
      const sellerAuthId = (window.getAuthUserId?window.getAuthUserId(user):(user?.auth_user_id || user?.authUserId));  // pra RPC commission_calculate (helper v201)
      const sellerAppUserId = (window.getSellerAppUserId?window.getSellerAppUserId(user):user?.id);                    // pra query commission_payments (helper v201)
      if (!sellerAuthId || !sellerAppUserId) {
        setError('IDs do usuário não encontrados (auth_user_id ou app_users.id)');
        setLoading(false);
        return;
      }
      setLoading(true);
      const now = new Date();
      const year = now.getFullYear();
      const month = now.getMonth() + 1;
      Promise.all([
        // Provisório do mês corrente — RPC espera auth_user_id
        sb.rpc('commission_calculate', { p_seller_id: sellerAuthId, p_year: year, p_month: month }),
        // Histórico últimos 6 meses — commission_payments.seller_id = app_users.id
        sb.from('commission_payments').select('*').eq('seller_id', sellerAppUserId).order('period_year', {ascending:false}).order('period_month', {ascending:false}).limit(6)
      ]).then(([calcRes, histRes]) => {
        if (calcRes.error) throw calcRes.error;
        if (histRes.error) throw histRes.error;
        setCurrent(calcRes.data);
        setHistory(histRes.data || []);
        setLoading(false);
      }).catch(e => {
        console.error('[ZNX] ComissaoVendedora error:', e);
        setError(e.message);
        setLoading(false);
      });
    }, [user?.auth_user_id, user?.authUserId]);

    if (loading) return (
      <div className="card" style={{marginBottom:18,padding:20,textAlign:'center',color:'#9CA3AF'}}>
        💰 Carregando comissão...
      </div>
    );

    if (error) return (
      <div className="card" style={{marginBottom:18,padding:14,background:'#FEE2E2',border:'1px solid #DC262633',color:'#DC2626',fontSize:13}}>
        ⚠️ {error}
      </div>
    );

    if (!current) return null;

    // [Wave 35 v224.16] Dados derivados via lib (barColor + faltando + scenarios)
    const pctMeta = current.pct_meta || 0;
    const atingiu = current.atingiu_meta;
    const faltando = cvCalcs.calcFaltando(current.meta, current.vendas_liquidas);
    const scenarios = cvCalcs.calcCommissionScenarios(current.vendas_liquidas);

    return (
      <div style={{marginBottom:18}}>
        {cvW.CommissionMainCard && <cvW.CommissionMainCard current={current} atingiu={atingiu} pctMeta={pctMeta} faltando={faltando}/>}
        {cvW.CommissionComparison && <cvW.CommissionComparison atingiu={atingiu} meta={current.meta} liquido={scenarios.liquido} comissaoSeBate={scenarios.comissaoSeBate} comissaoSeNaoBate={scenarios.comissaoSeNaoBate} diferencaBater={scenarios.diferencaBater}/>}
        {cvW.CommissionBreakdown && <cvW.CommissionBreakdown current={current}/>}
        {cvW.CommissionHistory && <cvW.CommissionHistory history={history}/>}
      </div>
    );
  }

  window.ZNX = window.ZNX || {};
  window.ZNX.components = window.ZNX.components || {};
  window.ZNX.components.ComissaoVendedora = ComissaoVendedora;
  window.ComissaoVendedora = ComissaoVendedora;
  window.ZNX.refactor_phase_5_loaded = window.ZNX.refactor_phase_5_loaded || {};
  window.ZNX.refactor_phase_5_loaded.ComissaoVendedora = true;
  // [Wave 35 marker v224.16] confirma extract executado
  window.ComissaoVendedora_v224_16_wave35 = true;
})();
