// js/components/common/Sidebar.jsx
// Sidebar de navegação + MENU config por role.
// Movido de index.html em Fase 5 do refactor (2026-04-29): L804-L832
// Deps: Icon (window.Icon — carregado antes via Icon.jsx)
(function() {
  'use strict';

  // CÓPIA EXATA do index.html L804-L832 (inclui MENU const + function Sidebar)
  const MENU={
    admin:[
      {section:'Principal',items:[{id:'dashboard',label:'Dashboard',icon:'home'},{id:'insights',label:'Insights',icon:'chart'},{id:'relatorio',label:'Relatório',icon:'chart'},{id:'historico',label:'Histórico Vendedor',icon:'chart'},{id:'regioes',label:'Análise Regional',icon:'map'}]},
      {section:'Produtos',items:[{id:'produtos',label:'Produtos',icon:'box'},{id:'marcas',label:'Marcas',icon:'box'},{id:'entradas',label:'Entrada de Estoque',icon:'inbox'},{id:'compras',label:'Compras',icon:'truck'}]},
      {section:'Gestão',items:[{id:'vendas',label:'Vendas',icon:'dollar'},{id:'orcamentos',label:'Orçamentos',icon:'file'},{id:'clientes',label:'Clientes',icon:'users'},{id:'fornecedores',label:'Fornecedores',icon:'truck'},{id:'devolucoes',label:'Devoluções',icon:'alert'}]},
      {section:'Financeiro',items:[{id:'pagar',label:'Contas a Pagar',icon:'alert'},{id:'receber',label:'Contas a Receber',icon:'check'},{id:'gastos',label:'Gastos',icon:'dollar'},{id:'pagamentos',label:'Pagamentos',icon:'check'}]},
      {section:'Freteiros',items:[{id:'freteiros',label:'Freteiros',icon:'truck'},{id:'notas-frete',label:'Notas de Frete',icon:'file'},{id:'receber-frete',label:'Receber Frete',icon:'inbox'},{id:'aprovacoes-frete',label:'Aprovações',icon:'check'}]},
      {section:'Sistema',items:[{id:'atividade',label:'Usuários',icon:'users'},{id:'auditoria',label:'Auditoria',icon:'alert'},{id:'perfil',label:'Meu Perfil',icon:'user'}/* ,{id:'config',label:'Integrações & API',icon:'settings'} // BC-002: escondido (endpoints /api/* não existem) — 2026-05-02 */]},
      // [v224.32 VENDAS-DESPACHO 20260526] Admin recebe badge quando estoquista solicita reimpressão · aprova/nega no modal in-place
      {section:'Despacho',items:[{id:'vendas-despacho',label:'🟡 Reimpressões Pendentes',icon:'alert',badge:'pendingReprintCount'}]},
    ],
    // FRT-C1+C2 (2026-05-09) — Amir vê freteiros + notas + perfil
    freight_manager:[
      {section:'Principal',items:[{id:'dashboard',label:'Dashboard',icon:'home'}]},
      {section:'Freteiros',items:[{id:'freteiros',label:'Freteiros',icon:'truck'},{id:'notas-frete',label:'Notas de Frete',icon:'file'}]},
      {section:'Sistema',items:[{id:'perfil',label:'Meu Perfil',icon:'user'}]},
    ],
    vendedor:[
      {section:'Principal',items:[{id:'dashboard',label:'Dashboard',icon:'home'},{id:'historico',label:'Histórico',icon:'chart'},{id:'regioes',label:'Análise Regional',icon:'map'}]},
      {section:'Gestão',items:[{id:'vendas',label:'Vendas',icon:'dollar'},{id:'orcamentos',label:'Orçamentos',icon:'file'},{id:'clientes',label:'Clientes',icon:'users'}]},
      {section:'Catálogo',items:[{id:'catalogo',label:'Produtos',icon:'box'}]},
    ],
    estoquista:[
      {section:'Principal',items:[{id:'dashboard',label:'Dashboard',icon:'home'}]},
      // [v224.32 VENDAS-DESPACHO 20260526] Workflow imprimir 1× + reprint admin-approved (substitui whatsapp manual)
      {section:'Vendas',items:[{id:'vendas-despacho',label:'🛒 Vendas a Despachar',icon:'truck',badge:'pendingPrintCount'}]},
      // [v224.27.1 ESTOQUISTA-PRIVACY] removido 'compras' — alinhado com ALLOWED_PAGES
      {section:'Produtos',items:[{id:'produtos',label:'Produtos',icon:'box'},{id:'entradas',label:'Entrada de Estoque',icon:'inbox'}]},
      // [v224.31 RECEBER-TRANSFERENCIA 20260526] Nova section · badge:'pendingTransfersCount' lookup em props.badges (pattern genérico)
      {section:'Transferências',items:[{id:'receber-transferencia',label:'Receber Transferência',icon:'truck',badge:'pendingTransfersCount'}]},
      // FRT-C3 (2026-05-09) — Abbes recebe frete via mobile-first
      {section:'Frete',items:[{id:'receber-frete',label:'Receber Frete',icon:'inbox'}]},
      // [v224.27.1 ESTOQUISTA-PRIVACY] section 'Gestão' inteira removida — único item 'fornecedores' foi cortado
      // {section:'Gestão',items:[{id:'fornecedores',label:'Fornecedores',icon:'truck'}]},
    ],
    financeiro:[
      {section:'Principal',items:[{id:'dashboard',label:'Dashboard',icon:'home'}]},
      {section:'Vendas',items:[{id:'vendas',label:'Vendas',icon:'dollar'},{id:'orcamentos',label:'Orçamentos',icon:'file'},{id:'clientes',label:'Clientes',icon:'users'}]},
      {section:'Estoque',items:[{id:'produtos',label:'Produtos',icon:'box'},{id:'entradas',label:'Entrada de Estoque',icon:'inbox'},{id:'compras',label:'Compras',icon:'truck'},{id:'devolucoes',label:'Devoluções',icon:'alert'},{id:'fornecedores',label:'Fornecedores',icon:'truck'}]},
      {section:'Financeiro',items:[{id:'pagar',label:'Contas a Pagar',icon:'alert'},{id:'receber',label:'Contas a Receber',icon:'check'},{id:'gastos',label:'Gastos',icon:'dollar'},{id:'pagamentos',label:'Pagamentos',icon:'check'}]},
      // FRT-C4 (2026-05-09) — financeiro pode VER aprovações (read-only via UI; RPC valida admin)
      {section:'Frete',items:[{id:'aprovacoes-frete',label:'Aprovações Frete',icon:'check'}]},
    ],
  };

  // [v224.31 RECEBER-TRANSFERENCIA 20260526] +badges={pendingTransfersCount:N} pattern genérico extensível
  // pra futuras notificações (item.badge: 'fooKey' → renderiza count se badges[fooKey] > 0 + pulse animation)
  function Sidebar({user,active,onNav,onLogout,onLoadDemo,onClearData,onTrocarSenha,onlineUsers,badges}){
    // [v224.40 E 20260526] Filter 'receber-frete' dinâmico · estoquistas sem flag (Ibra/Karim) NÃO veem item
    var menu = MENU[user.role]||[];
    if(user.role === 'estoquista' && user.can_receive_frete !== true){
      menu = menu.map(function(section){
        return Object.assign({}, section, {
          items: section.items.filter(function(it){ return it.id !== 'receber-frete'; })
        });
      }).filter(function(section){ return section.items.length > 0; });
    }
    const _badges = badges || {};
    return(
      <div className="sidebar">
        {/* [v224.31] Keyframes znx-pulse injetadas inline (uma vez por mount Sidebar) · namespaced contra conflito CSS global */}
        <style>{`@keyframes znx-pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.12);opacity:.82}}`}</style>
        <div style={{padding:'24px 18px 16px',borderBottom:'1px solid #E4E7EC'}}>
          <div style={{fontSize:22,fontWeight:800,color:'#2563EB',letterSpacing:3}}>ZAYNEX</div>
          <div style={{fontSize:10,color:'#9CA3AF',letterSpacing:2,marginTop:2}}>DISTRIBUIDORA</div>
          {onlineUsers>0&&<div style={{fontSize:10,color:'#16A34A',marginTop:4,display:'flex',alignItems:'center',gap:4}}><span style={{width:6,height:6,borderRadius:'50%',background:'#16A34A',display:'inline-block'}}/>{onlineUsers} online</div>}
        </div>
        <div style={{flex:1,overflowY:'auto',paddingBottom:10}}>
          {menu.map(sec=>(
            <div key={sec.section}>
              <div className="nav-section">{sec.section}</div>
              {sec.items.map(item=>{
                const badgeCount = item.badge ? (_badges[item.badge] || 0) : 0;
                return (
                  <div key={item.id} className={`nav-item ${active===item.id?'active':''}`} onClick={()=>onNav(item.id)} style={{display:'flex',alignItems:'center'}}>
                    <Icon n={item.icon} size={14}/>
                    <span>{item.label}</span>
                    {badgeCount>0 && (
                      <span style={{
                        marginLeft:'auto',background:'#DC2626',color:'#fff',
                        fontSize:10,fontWeight:700,padding:'2px 7px',borderRadius:999,
                        animation:'znx-pulse 2s ease-in-out infinite',minWidth:18,textAlign:'center'
                      }}>{badgeCount}</span>
                    )}
                  </div>
                );
              })}
            </div>
          ))}
        </div>
      </div>
    );
  }

  window.ZNX = window.ZNX || {};
  window.ZNX.components = window.ZNX.components || {};
  window.ZNX.components.Sidebar = Sidebar;
  window.ZNX.components.MENU = MENU;
  window.Sidebar = Sidebar;
  window.MENU = MENU;

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

})();
