// js/components/widgets/VendedorMetaBar.jsx
// Barra de progresso de meta individual do vendedor.
// Movido de index.html em Fase 5 do refactor (2026-04-29): L8984-L9086
// Deps runtime: fmt, saleFinalTotal (globals)
(function() {
  'use strict';
  const {useState, useEffect, useRef, useCallback, useMemo} = React;

function VendedorMetaBar({user,sales,metas}){
  const now=new Date();
  const cm=`${now.getFullYear()}-${String(now.getMonth()+1).padStart(2,'0')}`;
  const meta=metas[user.name]||0;
  // [BUG-FIX 20260504] Excluir Cancelada/Devolvida (total) do faturamento da meta
  const rev=useMemo(()=>sales.filter(s=>s.sellerName===user.name&&s.date?.startsWith(cm)&&isFaturada(s)).reduce((a,s)=>a+saleFinalTotal(s),0),[sales,user.name,cm]);
  const pct=meta>0?Math.min(100,(rev/meta)*100):0;
  // [BUG-FIX 20260506] Cores mais graduais — feedback continuo conforme avanca rumo a meta
  const color=
    pct>=100?'#16A34A':       // verde forte — META BATIDA
    pct>=95 ?'#22C55E':       // verde claro — quase la
    pct>=80 ?'#2563EB':       // azul — bom progresso
    pct>=60 ?'#EAB308':       // amarelo — ritmo medio
    pct>=40 ?'#EA580C':       // laranja — atencao
    pct>=20 ?'#DC2626':       // vermelho — longe
              '#991B1B';      // vermelho escuro — comeco do mes
  const daysInMonth=new Date(now.getFullYear(),now.getMonth()+1,0).getDate();
  const daysLeft=daysInMonth-now.getDate();
  const faltando=Math.max(0,meta-rev);
  const carPos=Math.max(0,Math.min(pct,96));

  if(meta===0)return(
    <div style={{background:'#F8FAFB',borderBottom:'1px solid #E4E7EC',padding:'8px 28px',display:'flex',alignItems:'center',gap:10,position:'sticky',top:0,zIndex:90}}>
      <span style={{fontSize:13}}>🎯</span>
      <span style={{fontSize:12,color:'#6B7280'}}>Meta mensal não definida — fale com o admin para configurar</span>
    </div>
  );

  return(
    <div style={{background:'linear-gradient(180deg,#1C1C28 0%,#2A2A38 100%)',borderBottom:'1px solid #E4E7EC',padding:'10px 28px',position:'sticky',top:0,zIndex:90,boxShadow:'0 2px 12px rgba(0,0,0,0.12)'}}>
      <div style={{display:'flex',alignItems:'center',gap:16}}>
        {/* Label */}
        <div style={{display:'flex',flexDirection:'column',minWidth:80}}>
          <span style={{fontSize:9,color:'#6B7280',textTransform:'uppercase',letterSpacing:1}}>Meta Mensal</span>
          <span style={{fontSize:11,color:'#9CA3AF',fontWeight:600}}>{fmt(meta)}</span>
        </div>

        {/* Race track */}
        <div style={{flex:1,position:'relative',height:34,minWidth:120}}>
          {/* Track base — checkered-ish pattern */}
          <div style={{position:'absolute',top:12,left:0,right:24,height:10,background:'#F9FAFB',borderRadius:5,border:'1px solid #E4E7EC',overflow:'hidden'}}>
            {/* Lane dividers */}
            {[25,50,75].map(p=>(
              <div key={p} style={{position:'absolute',top:0,bottom:0,left:`${p}%`,width:1,background:'#252525'}}/>
            ))}
            {/* Colored fill with shimmer */}
            <div className="meta-bar-track-fill" style={{
              height:'100%',width:`${pct}%`,
              background:`linear-gradient(90deg,#DC262688,#EA580C99,#2563EBbb,${color}) 200% center / 400% 100%`,
              borderRadius:5,
              transition:'width 1.2s cubic-bezier(.34,1.4,.64,1)',
              boxShadow:`0 0 12px ${color}88,0 0 4px ${color}`,
              position:'relative',
            }}>
              {/* Bright tip glow */}
              <div style={{position:'absolute',right:0,top:0,bottom:0,width:16,background:`linear-gradient(90deg,transparent,${color})`,borderRadius:'0 5px 5px 0'}}/>
            </div>
          </div>

          {/* [BUG-FIX 20260506-v60] Triangulo agudo apontando direita. Animation carBounce CSS atualizada em
              index.html pra so translateY (sem scaleX) — nao mais sobrescreve transform do SVG. */}
          <div style={{
            position:'absolute',
            left:`${carPos}%`,
            top:0,
            transform:'translateX(-50%)',
            transition:'left 1.2s cubic-bezier(.34,1.4,.64,1)',
            filter:`drop-shadow(0 0 8px ${color}) drop-shadow(0 2px 4px rgba(0,0,0,0.45))`,
            animation:'carBounce .7s ease-in-out infinite alternate',
            userSelect:'none',
            pointerEvents:'none',
          }}>
            <svg width="38" height="24" viewBox="0 0 38 24" style={{display:'block'}} aria-label="rumo à meta">
              {/* TRES TRACINHOS de velocidade BEM atras (esquerda) */}
              <line x1="0" y1="11" x2="3" y2="11" stroke={color} strokeWidth="2" strokeLinecap="round" opacity="0.4"/>
              <line x1="0" y1="14" x2="2" y2="14" stroke={color} strokeWidth="2" strokeLinecap="round" opacity="0.55"/>

              {/* TRIANGULO AGUDO apontando direita — forma de FLECHA inequivoca */}
              {/* Base larga em x=4 (esquerda), ponta afilada em x=36 (direita) */}
              <path d="M4 5 L4 19 L36 12 Z"
                    fill={color} stroke="#1B2A4A" strokeWidth="1" strokeLinejoin="round"/>

              {/* SETA BRANCA sobre o triangulo — reforca direita */}
              <path d="M10 9 L18 12 L10 15 L13 12 Z"
                    fill="#FFFFFF" opacity="0.85"/>

              {/* Ponto AMARELO (farol) na ponta direita */}
              <circle cx="33" cy="12" r="1.5" fill="#FEF08A" stroke="#FCD34D" strokeWidth="0.5"/>

              {/* Rodas embaixo pra dar sensacao de carro */}
              <circle cx="9" cy="20" r="2.5" fill="#1B2A4A" stroke="#FFFFFF" strokeWidth="0.4"/>
              <circle cx="9" cy="20" r="0.9" fill="#9CA3AF"/>
              <circle cx="26" cy="20" r="2.5" fill="#1B2A4A" stroke="#FFFFFF" strokeWidth="0.4"/>
              <circle cx="26" cy="20" r="0.9" fill="#9CA3AF"/>
            </svg>
          </div>

          {/* Finish flag */}
          <div style={{position:'absolute',right:0,top:-2,fontSize:22,lineHeight:1,userSelect:'none'}}>🏁</div>

          {/* % label on track */}
          {pct>12&&(
            <div style={{position:'absolute',left:`${Math.min(pct-1,90)}%`,top:13,transform:'translateX(-100%)',fontSize:9,fontWeight:700,color:'rgba(0,0,0,.7)',letterSpacing:.5,userSelect:'none',pointerEvents:'none'}}>
              {pct.toFixed(0)}%
            </div>
          )}
        </div>

        {/* Big % */}
        <div style={{fontSize:20,fontWeight:900,color,minWidth:60,textAlign:'right',fontVariantNumeric:'tabular-nums',textShadow:`0 0 12px ${color}55`}}>
          {pct.toFixed(1)}%
        </div>

        {/* Rev / Meta */}
        <div style={{display:'flex',flexDirection:'column',alignItems:'flex-end',minWidth:100}}>
          <span style={{fontSize:13,fontWeight:700,color:'#374151'}}>{fmt(rev)}</span>
          <span style={{fontSize:10,color:'#6B7280'}}>de {fmt(meta)}</span>
        </div>

        {/* Right info: meta batida or faltando */}
        {pct>=100?(
          <div style={{fontSize:13,fontWeight:800,color:'#16A34A',whiteSpace:'nowrap',animation:'metaPulse .8s ease-in-out infinite',textShadow:'0 0 14px #16A34A88',display:'flex',alignItems:'center',gap:6}}>
            🎉 META BATIDA!
          </div>
        ):(
          <div style={{display:'flex',flexDirection:'column',alignItems:'flex-end',minWidth:80}}>
            <span style={{fontSize:11,color:'#DC2626',fontWeight:600}}>falta {fmt(faltando)}</span>
            {daysLeft>0&&<span style={{fontSize:10,color:'#6B7280'}}>{daysLeft} dias · {fmt(faltando/daysLeft)}/dia</span>}
          </div>
        )}
      </div>
    </div>
  );
}

// ── CONFIGURAÇÕES / INTEGRAÇÕES ───────────────────────────────

  window.ZNX = window.ZNX || {};
  window.ZNX.components = window.ZNX.components || {};
  window.ZNX.components.VendedorMetaBar = VendedorMetaBar;
  window.VendedorMetaBar = VendedorMetaBar;

  window.ZNX.refactor_phase_5_loaded = window.ZNX.refactor_phase_5_loaded || {};
  window.ZNX.refactor_phase_5_loaded.VendedorMetaBar = true;

})();
