// App principal — Diskat OPS · paleta cyber/neon
// Sidebar escura, topbar com glow, KPIs neon

const { useState, useEffect, useMemo, useRef } = React;

// ─── Sistema de permissões (RBAC) ──────────────────────────
// Cada role tem uma lista de ações permitidas. Admin tem '*' (pode tudo).
const PERMISSOES_POR_ROLE = {
  admin: '*',
  producao: [
    'editar:impressao', 'editar:tags', 'visualizar:tudo',
  ],
  atendimento: [
    'editar:pagamento', 'editar:entrega', 'editar:formaPagamento',
    'editar:cliente', 'criar:cliente', 'remover:cliente',
    'editar:tags', 'criar:pedido',
    'visualizar:tudo',
  ],
};
function pode(perfil, acao) {
  if (!perfil) return false;
  const role = perfil.role || 'admin'; // fallback p/ legado
  const perms = PERMISSOES_POR_ROLE[role];
  if (perms === '*') return true;
  if (!Array.isArray(perms)) return false;
  return perms.includes(acao);
}
// Disponibilizar globalmente para outros arquivos
window.pode = pode;

// ─── Som de notificação (Web Audio API, sem arquivo externo) ─
let _notifAudioCtx = null;
function playNotifSound() {
  try {
    if (!_notifAudioCtx) {
      const Ctx = window.AudioContext || window.webkitAudioContext;
      if (!Ctx) return;
      _notifAudioCtx = new Ctx();
    }
    if (_notifAudioCtx.state === 'suspended') _notifAudioCtx.resume();

    const ctx = _notifAudioCtx;
    const now = ctx.currentTime;

    // Beep duplo agudo, estilo "ping"
    [880, 1320].forEach((freq, i) => {
      const t0 = now + i * 0.09;
      const osc = ctx.createOscillator();
      const gain = ctx.createGain();
      osc.type = 'sine';
      osc.frequency.setValueAtTime(freq, t0);
      gain.gain.setValueAtTime(0, t0);
      gain.gain.linearRampToValueAtTime(0.18, t0 + 0.012);
      gain.gain.exponentialRampToValueAtTime(0.0001, t0 + 0.18);
      osc.connect(gain).connect(ctx.destination);
      osc.start(t0);
      osc.stop(t0 + 0.2);
    });
  } catch (err) {
    console.warn('[notif] som indisponível:', err);
  }
}

// ─── Sidebar ────────────────────────────────────────────────
function Sidebar({ tela, setTela, perfil, onLogout, badges = {} }) {
  const items = [
    { id: 'home',       label: 'Início',     icon: 'chart' },
    { id: 'pedidos',    label: 'Pedidos',    icon: 'list' },
    { id: 'fila',       label: 'Fila 3D',    icon: 'printer', badge: badges.fila },
    { id: 'envios',     label: 'Envios',     icon: 'truck',   badge: badges.envios },
    { id: 'catalogo',   label: 'Catálogo',   icon: 'package' },
    { id: 'clientes',   label: 'Clientes',   icon: 'users' },
    { id: 'cancelados', label: 'Cancelados', icon: 'trash',   badge: badges.cancelados },
  ];
  return (
    <aside style={{
      width: 230, background: 'var(--bg-pane)', color: 'var(--text)',
      display:'flex', flexDirection:'column', padding: '20px 14px',
      borderRight:'1px solid var(--line)',
      backgroundImage: 'linear-gradient(180deg, rgba(255,46,154,0.08), transparent 30%)',
    }}>
      <div style={{ display:'flex', alignItems:'center', gap: 10, padding:'4px 8px 22px' }}>
        <DiskatLogo size={36}/>
        <div style={{ lineHeight: 1 }}>
          <div style={{ fontFamily:'var(--font-display)', fontWeight: 800, fontSize: 18, letterSpacing:'-0.02em' }}>Diskat<span style={{ color:'var(--primary)' }}>·</span>ops</div>
          <div style={{ fontFamily:'var(--font-mono)', fontSize: 8, color:'var(--accent)', letterSpacing:'0.22em', marginTop: 3 }}>v1.0 · NERD MODE</div>
        </div>
      </div>

      <nav style={{ display:'flex', flexDirection:'column', gap: 2, flex: 1 }}>
        {items.map(it => {
          const sel = tela === it.id;
          const I = Icon[it.icon];
          return (
            <button key={it.id} onClick={() => setTela(it.id)} style={{
              display:'flex', alignItems:'center', gap: 12,
              padding: '11px 12px', borderRadius: 10,
              background: sel ? 'linear-gradient(90deg, rgba(255,46,154,0.20), rgba(255,46,154,0.05))' : 'transparent',
              color: sel ? '#fff' : 'var(--text-2)',
              border:'none', cursor:'pointer', fontSize: 14, fontWeight: sel ? 600 : 500,
              textAlign:'left', position:'relative',
              fontFamily:'var(--font-body)',
              boxShadow: sel ? '0 0 20px rgba(255,46,154,0.15)' : 'none',
            }}>
              {sel && <div style={{ position:'absolute', left: 0, top: 8, bottom: 8, width: 3, background:'var(--primary)', borderRadius: 999, boxShadow:'0 0 8px var(--primary)' }}/>}
              <I size={17}/>
              <span style={{ flex: 1 }}>{it.label}</span>
              {it.badge > 0 && (
                <span style={{
                  background: sel ? 'var(--primary)' : 'rgba(255,46,154,0.2)',
                  color: sel ? '#fff' : 'var(--primary)',
                  fontSize: 10, fontWeight: 700, padding:'2px 7px', borderRadius: 999,
                  fontFamily:'var(--font-mono)',
                }}>{it.badge}</span>
              )}
            </button>
          );
        })}
      </nav>

      <div style={{
        padding: '12px 10px', borderRadius: 10,
        background: 'rgba(255,255,255,0.04)',
        border: '1px solid var(--line)',
        display:'flex', alignItems:'center', gap: 10,
      }}>
        <div style={{
          width: 32, height: 32, borderRadius: 8,
          background: perfil.cor, color:'#fff',
          display:'flex', alignItems:'center', justifyContent:'center',
          fontFamily:'var(--font-display)', fontWeight: 700, fontSize: 14,
          boxShadow: `0 0 10px ${perfil.cor}55`,
        }}>{perfil.avatar}</div>
        <div style={{ flex: 1, lineHeight: 1.2, minWidth: 0 }}>
          <div style={{ display:'flex', alignItems:'center', gap:5 }}>
            <span style={{ fontSize: 13, fontWeight: 600, whiteSpace:'nowrap', overflow:'hidden', textOverflow:'ellipsis' }}>{perfil.nome}</span>
            {perfil.role === 'admin' && (
              <span title="Acesso total" style={{
                fontSize:8, fontWeight:700, padding:'1px 5px', borderRadius:999,
                background:'rgba(155,108,255,0.2)', color:'#c4a8ff', border:'1px solid rgba(155,108,255,0.4)',
                fontFamily:'var(--font-mono)', letterSpacing:'0.08em',
              }}>ADMIN</span>
            )}
          </div>
          <div style={{ fontSize: 10, color:'var(--text-3)', whiteSpace:'nowrap', overflow:'hidden', textOverflow:'ellipsis' }}>{perfil.funcao.split('·')[0].trim()}</div>
        </div>
        <button onClick={onLogout} title="Sair" style={{
          background:'none', border:'none', color:'var(--text-3)', cursor:'pointer',
          padding: 6, borderRadius: 6,
        }}><Icon.logout size={14}/></button>
      </div>

      <div style={{ marginTop: 10, display:'flex', justifyContent:'center' }}>
        <BuiltByDDL/>
      </div>
    </aside>
  );
}

// ─── Topbar ─────────────────────────────────────────────────
function Topbar({ titulo, subtitulo, action, alertCount = 0, onBellClick }) {
  const temAlerta = alertCount > 0;
  const handleBell = () => {
    playNotifSound();
    if (onBellClick) onBellClick();
  };
  return (
    <header style={{
      display:'flex', alignItems:'center', justifyContent:'space-between',
      padding: '20px 28px', borderBottom:'1px solid var(--line)',
      background: 'var(--bg-pane)',
    }}>
      <div>
        <h1 style={{ margin: 0, fontFamily:'var(--font-display)', fontSize: 22, fontWeight: 800, letterSpacing:'-0.02em', color: 'var(--text)' }}>{titulo}</h1>
        {subtitulo && <div style={{ fontSize: 13, color:'var(--text-3)', marginTop: 2 }}>{subtitulo}</div>}
      </div>
      <div style={{ display:'flex', alignItems:'center', gap: 10 }}>
        {action}
        <button
          onClick={handleBell}
          aria-label={temAlerta ? `${alertCount} ${alertCount === 1 ? 'alerta' : 'alertas'}` : 'Sem alertas'}
          title={temAlerta ? `${alertCount} ${alertCount === 1 ? 'alerta' : 'alertas'} — clique para tocar` : 'Sem alertas'}
          style={{
            width: 38, height: 38, borderRadius: 10,
            background:'rgba(255,255,255,0.04)', border:'1px solid var(--line)', cursor:'pointer',
            display:'flex', alignItems:'center', justifyContent:'center', position:'relative',
            color:'var(--text-2)', transition:'all .15s',
          }}
          onMouseEnter={e => { e.currentTarget.style.borderColor = 'var(--primary)'; e.currentTarget.style.color = 'var(--text)'; }}
          onMouseLeave={e => { e.currentTarget.style.borderColor = 'var(--line)'; e.currentTarget.style.color = 'var(--text-2)'; }}
        >
          <Icon.bell size={16}/>
          {temAlerta && (
            <span style={{
              position:'absolute', top: 4, right: 4,
              minWidth: 16, height: 16, padding:'0 4px',
              borderRadius: 999, background:'var(--primary)',
              fontSize: 10, fontWeight: 700, color:'#fff',
              display:'flex', alignItems:'center', justifyContent:'center',
              boxShadow:'0 0 6px var(--primary)',
              fontFamily:'var(--font-mono)',
            }}>{alertCount > 9 ? '9+' : alertCount}</span>
          )}
        </button>
      </div>
    </header>
  );
}

// ─── KPI Card ───────────────────────────────────────────────
function KPI({ label, valor, delta, accent, sub }) {
  return (
    <div style={{
      padding: '18px 20px', background:'var(--bg-card)', borderRadius: 14,
      border:'1px solid var(--line)',
      display:'flex', flexDirection:'column', gap: 4,
      position: 'relative', overflow: 'hidden',
    }}>
      {accent && <div style={{ position:'absolute', top:0, left:0, right:0, height: 2, background: accent, opacity: 0.7 }}/>}
      <div style={{ fontFamily:'var(--font-mono)', fontSize: 10, letterSpacing:'0.16em', color:'var(--text-3)', textTransform:'uppercase' }}>{label}</div>
      <div style={{ fontFamily:'var(--font-display)', fontWeight: 800, fontSize: 28, letterSpacing:'-0.02em', color: accent || 'var(--text)' }}>{valor}</div>
      <div style={{ display:'flex', alignItems:'center', gap: 8, fontSize: 12, color:'var(--text-3)' }}>
        {delta && (
          <span style={{
            color: delta === '0%' ? 'var(--text-3)' : (delta.startsWith('+') ? 'var(--good)' : 'var(--bad)'),
            fontFamily:'var(--font-mono)', fontWeight: 600, fontSize: 11,
          }}>{delta}</span>
        )}
        {sub && <span>{sub}</span>}
      </div>
    </div>
  );
}

// ─── HOME ───────────────────────────────────────────────────
function Home({ pedidos, perfil, onAbrir, onIrPara }) {
  // Período pra KPIs de faturamento — hoje, mês atual, mês passado, 3 meses, ano, todos
  const [periodo, setPeriodo] = useState('mes_atual');
  const periodos = [
    { id:'hoje',         lbl:'Hoje' },
    { id:'7dias',        lbl:'Últimos 7 dias' },
    { id:'mes_atual',    lbl:'Mês atual' },
    { id:'mes_anterior', lbl:'Mês anterior' },
    { id:'3meses',       lbl:'Últimos 3 meses' },
    { id:'ano',          lbl:'Ano atual' },
    { id:'todos',        lbl:'Todos' },
  ];

  // Helper — calcula o range do período em referência a uma data ancora.
  // ancora=Date hoje → "mes_atual" cobre o mês corrente. Pra comparativo,
  // usamos a mesma função com ancora deslocada pro período anterior.
  const rangeDoPeriodo = (id, ancora) => {
    const d = new Date(ancora);
    let inicio, fim;
    if (id === 'hoje') {
      inicio = new Date(d.getFullYear(), d.getMonth(), d.getDate());
      fim    = new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1);
    } else if (id === '7dias') {
      fim    = new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1);
      inicio = new Date(d.getFullYear(), d.getMonth(), d.getDate() - 6);
    } else if (id === 'mes_atual') {
      inicio = new Date(d.getFullYear(), d.getMonth(), 1);
      fim    = new Date(d.getFullYear(), d.getMonth() + 1, 1);
    } else if (id === 'mes_anterior') {
      inicio = new Date(d.getFullYear(), d.getMonth() - 1, 1);
      fim    = new Date(d.getFullYear(), d.getMonth(), 1);
    } else if (id === '3meses') {
      inicio = new Date(d.getFullYear(), d.getMonth() - 2, 1);
      fim    = new Date(d.getFullYear(), d.getMonth() + 1, 1);
    } else if (id === 'ano') {
      inicio = new Date(d.getFullYear(), 0, 1);
      fim    = new Date(d.getFullYear() + 1, 0, 1);
    } else { // 'todos'
      inicio = new Date(0);
      fim    = new Date(d.getFullYear() + 100, 0, 1);
    }
    return [inicio, fim];
  };

  // Período anterior equivalente (pra comparação)
  const ancoraAnterior = (id, hoje) => {
    const d = new Date(hoje);
    if (id === 'hoje')         return new Date(d.getFullYear(), d.getMonth(), d.getDate() - 1);
    if (id === '7dias')        return new Date(d.getFullYear(), d.getMonth(), d.getDate() - 7);
    if (id === 'mes_atual')    return new Date(d.getFullYear(), d.getMonth() - 1, d.getDate());
    if (id === 'mes_anterior') return new Date(d.getFullYear(), d.getMonth() - 2, d.getDate());
    if (id === '3meses')       return new Date(d.getFullYear(), d.getMonth() - 3, d.getDate());
    if (id === 'ano')          return new Date(d.getFullYear() - 1, d.getMonth(), d.getDate());
    return null; // 'todos' não tem comparativo
  };

  const idAnteriorPara = (id) => {
    if (id === 'mes_anterior') return 'mes_atual'; // anterior do "mês anterior" = "mês retrasado" → calcula como "mes_atual" ancorado 1 mês antes
    return id; // mesmo período, anchor deslocada
  };

  const dentroRange = (dataStr, [ini, fim]) => {
    const t = new Date(dataStr).getTime();
    return t >= ini.getTime() && t < fim.getTime();
  };

  const hojeRef = new Date();
  const [iniAtual, fimAtual] = rangeDoPeriodo(periodo, hojeRef);
  const pedidosAtual = pedidos.filter(p => dentroRange(p.data, [iniAtual, fimAtual]));

  const ancAnt = ancoraAnterior(periodo, hojeRef);
  const pedidosAnterior = ancAnt ? pedidos.filter(p => dentroRange(p.data, rangeDoPeriodo(idAnteriorPara(periodo), ancAnt))) : [];

  const fatTotal      = pedidosAtual.reduce((s, p) => s + calcTotalPago(p), 0);
  const lucroTotal    = pedidosAtual.reduce((s, p) => s + calcLucro(p), 0);
  const fatAnterior   = pedidosAnterior.reduce((s, p) => s + calcTotalPago(p), 0);
  const lucroAnterior = pedidosAnterior.reduce((s, p) => s + calcLucro(p), 0);
  const margem = fatTotal > 0 ? (lucroTotal / fatTotal) * 100 : 0;

  // Delta % vs período anterior. Retorna string "+12.3%" / "-5.0%" / null se sem base.
  const calcDelta = (atual, ant) => {
    if (!ant || ant === 0) return null;
    const pct = ((atual - ant) / Math.abs(ant)) * 100;
    if (Math.abs(pct) < 0.1) return '0%';
    return (pct > 0 ? '+' : '') + pct.toFixed(1) + '%';
  };
  const deltaFat   = calcDelta(fatTotal, fatAnterior);
  const deltaLucro = calcDelta(lucroTotal, lucroAnterior);

  const labelComparativo = {
    'hoje':         'vs. ontem',
    '7dias':        'vs. 7 dias anteriores',
    'mes_atual':    'vs. mês anterior',
    'mes_anterior': 'vs. mês retrasado',
    '3meses':       'vs. 3 meses anteriores',
    'ano':          'vs. ano anterior',
    'todos':        '',
  }[periodo] || '';

  const labelPeriodo = (periodos.find(p => p.id === periodo) || {}).lbl || '';

  // Sempre referente ao "agora" (não filtra por período): operações ativas
  const fila = pedidos.filter(p => ['Fila','Fatiando','Imprimindo','Pos-processamento'].includes(p.statusImpressao));
  const aDespachar = pedidos.filter(p => p.statusImpressao === 'Pronto' && p.statusEntrega === 'Pendente');
  const falhas = pedidos.filter(p => p.statusImpressao === 'Falhou');
  const hojeStr = new Date().toISOString().slice(0,10);
  const hoje = pedidos.filter(p => p.data === hojeStr);

  const alertas = [
    ...falhas.map(p => ({ tipo:'erro', msg:`Reimprimir ${p.id}`, sub: p.produto })),
    ...pedidos.filter(p => p.statusPagamento === 'Aguardando').map(p => ({ tipo:'aviso', msg:`Pagamento pendente · ${p.id}`, sub: p.cliente })),
  ];

  return (
    <div style={{ padding: 28, display:'flex', flexDirection:'column', gap: 24 }}>
      <div>
        <div style={{ fontSize: 13, color:'var(--text-3)' }}>{new Date().toLocaleDateString('pt-BR', { weekday:'long', day:'numeric', month:'long' })}</div>
        <div style={{ fontFamily:'var(--font-display)', fontSize: 26, fontWeight: 700, marginTop: 4, color:'var(--text)' }}>
          Olá, <span style={{ color:'var(--primary)', textShadow:'0 0 12px rgba(255,46,154,0.5)' }}>{perfil.nome}</span> 👋
        </div>
      </div>

      <div style={{ display:'flex', alignItems:'center', justifyContent:'space-between', gap:12, flexWrap:'wrap' }}>
        <div style={{ fontFamily:'var(--font-mono)', fontSize:10, letterSpacing:'0.18em', color:'var(--text-3)', textTransform:'uppercase' }}>
          Faturamento · {labelPeriodo}
        </div>
        <div style={{ display:'flex', gap:5, flexWrap:'wrap' }}>
          {periodos.map(p => {
            const ativo = periodo === p.id;
            return (
              <button key={p.id} onClick={() => setPeriodo(p.id)} style={{
                padding:'5px 10px', borderRadius:999, fontSize:11, fontWeight:600, cursor:'pointer',
                background: ativo ? 'var(--primary)' : 'rgba(255,255,255,0.04)',
                color: ativo ? '#fff' : 'var(--text-3)',
                border: '1px solid '+(ativo ? 'var(--primary)' : 'var(--line)'),
                boxShadow: ativo ? '0 0 10px rgba(255,46,154,0.4)' : 'none',
                transition:'all .12s',
              }}>{p.lbl}</button>
            );
          })}
        </div>
      </div>

      <div style={{ display:'grid', gridTemplateColumns:'repeat(4, 1fr)', gap: 14 }}>
        <KPI label="Pedidos no período" valor={pedidosAtual.length} sub={`${pedidosAnterior.length} no per. anterior`} accent="var(--accent)"/>
        <KPI label="Faturamento" valor={fmtBRL(fatTotal)} delta={deltaFat} sub={labelComparativo}/>
        <KPI label="Lucro líquido" valor={fmtBRL(lucroTotal)} delta={deltaLucro} accent="var(--primary)" sub={`margem ${margem.toFixed(1)}%`}/>
        <KPI label="Na fila 3D agora" valor={fila.length} sub={`${aDespachar.length} prontos p/ envio`}/>
      </div>

      <div>
        <div style={{ fontFamily:'var(--font-mono)', fontSize: 10, letterSpacing:'0.18em', color:'var(--text-3)', textTransform:'uppercase', marginBottom: 12 }}>O que você quer fazer?</div>
        <div style={{ display:'grid', gridTemplateColumns:'repeat(4, 1fr)', gap: 12 }}>
          {[
            { lbl:'Novo pedido', sub:'em 4 toques', icon:'plus', cor:'var(--primary)', acao:'novo' },
            { lbl:'Fila de impressão', sub:`${fila.length} ativos`, icon:'printer', cor:'var(--accent)', acao:'fila' },
            { lbl:'Despachar', sub:`${aDespachar.length} prontos`, icon:'truck', cor:'#9b6cff', acao:'envios' },
            { lbl:'Ver pedidos', sub:`${pedidos.length} total`, icon:'list', cor:'#ffb300', acao:'pedidos' },
          ].map(a => {
            const I = Icon[a.icon];
            return (
              <button key={a.lbl} onClick={() => onIrPara(a.acao)} style={{
                padding: 18, background:'var(--bg-card)', border:'1px solid var(--line)', borderRadius: 14,
                display:'flex', alignItems:'center', gap: 14, cursor:'pointer', textAlign:'left',
                transition:'all .15s', color:'var(--text)',
              }}
              onMouseEnter={e => { e.currentTarget.style.borderColor = a.cor; e.currentTarget.style.transform='translateY(-2px)'; e.currentTarget.style.boxShadow=`0 8px 24px ${a.cor}30`; }}
              onMouseLeave={e => { e.currentTarget.style.borderColor = 'var(--line)'; e.currentTarget.style.transform='translateY(0)'; e.currentTarget.style.boxShadow='none'; }}>
                <div style={{
                  width: 44, height: 44, borderRadius: 11,
                  background: 'rgba(255,255,255,0.04)', color: a.cor,
                  border: `1px solid ${a.cor}40`,
                  display:'flex', alignItems:'center', justifyContent:'center',
                }}><I size={20}/></div>
                <div style={{ flex: 1 }}>
                  <div style={{ fontSize: 14, fontWeight: 600 }}>{a.lbl}</div>
                  <div style={{ fontSize: 11, color:'var(--text-3)', marginTop: 2 }}>{a.sub}</div>
                </div>
              </button>
            );
          })}
        </div>
      </div>

      <div style={{ display:'grid', gridTemplateColumns:'1fr 1.2fr', gap: 16 }}>
        <div style={{ background:'var(--bg-card)', border:'1px solid var(--line)', borderRadius: 14, padding: 18 }}>
          <div style={{ display:'flex', alignItems:'center', gap: 8, marginBottom: 14 }}>
            <Icon.alert size={14} style={{ color:'var(--primary)' }}/>
            <div style={{ fontFamily:'var(--font-display)', fontWeight: 700, fontSize: 14, color:'var(--text)' }}>Precisa atenção</div>
          </div>
          <div style={{ display:'flex', flexDirection:'column', gap: 8 }}>
            {alertas.length === 0 && <div style={{ fontSize: 13, color:'var(--text-3)' }}>Tudo em dia ✨</div>}
            {alertas.map((a, i) => (
              <div key={i} style={{
                display:'flex', alignItems:'center', gap: 10, padding: '10px 12px',
                background: a.tipo === 'erro' ? 'rgba(255,77,106,0.10)' : 'rgba(255,179,0,0.10)',
                borderRadius: 10, border: `1px solid ${a.tipo === 'erro' ? 'rgba(255,77,106,0.3)' : 'rgba(255,179,0,0.3)'}`,
              }}>
                <div style={{ width: 6, height: 6, borderRadius: 999, background: a.tipo === 'erro' ? 'var(--bad)' : 'var(--warn)', boxShadow:'0 0 6px currentColor' }}/>
                <div style={{ flex: 1, lineHeight: 1.3 }}>
                  <div style={{ fontSize: 13, fontWeight: 600, color: a.tipo === 'erro' ? '#ff8da1' : '#ffd166' }}>{a.msg}</div>
                  <div style={{ fontSize: 11, color:'var(--text-3)', marginTop: 1 }}>{a.sub}</div>
                </div>
              </div>
            ))}
          </div>
        </div>

        <div style={{ background:'var(--bg-card)', border:'1px solid var(--line)', borderRadius: 14, padding: 18 }}>
          <div style={{ display:'flex', alignItems:'center', justifyContent:'space-between', marginBottom: 14 }}>
            <div style={{ fontFamily:'var(--font-display)', fontWeight: 700, fontSize: 14, color:'var(--text)' }}>Últimos pedidos</div>
            <button onClick={() => onIrPara('pedidos')} style={{ background:'none', border:'none', color:'var(--accent)', fontSize: 12, fontWeight: 600, cursor:'pointer' }}>ver todos →</button>
          </div>
          <div style={{ display:'flex', flexDirection:'column', gap: 4 }}>
            {pedidos.slice(0, 5).map(p => (
              <button key={p.id} onClick={() => onAbrir(p)} style={{
                display:'flex', alignItems:'center', gap: 12, padding:'10px 8px',
                background:'none', border:'none', borderRadius: 8, cursor:'pointer', textAlign:'left',
                transition:'background .1s', color:'var(--text)',
              }}
              onMouseEnter={e => e.currentTarget.style.background = 'rgba(255,255,255,0.04)'}
              onMouseLeave={e => e.currentTarget.style.background = 'transparent'}>
                <div style={{
                  width: 36, height: 36, borderRadius: 8, background:'rgba(255,255,255,0.04)',
                  display:'flex', alignItems:'center', justifyContent:'center', flexShrink: 0,
                  fontFamily:'var(--font-mono)', fontSize: 10, color:'var(--text-3)', fontWeight: 600,
                  border: '1px solid var(--line)',
                }}>{p.id.split('-').pop()}</div>
                <div style={{ flex: 1, minWidth: 0 }}>
                  <div style={{ fontSize: 13, fontWeight: 600, whiteSpace:'nowrap', overflow:'hidden', textOverflow:'ellipsis' }}>{p.produto}</div>
                  <div style={{ fontSize: 11, color:'var(--text-3)' }}>{p.cliente} · {fmtData(p.data)}</div>
                </div>
                <StatusBadge status={p.statusImpressao} palette={STATUS_IMP_COR}/>
              </button>
            ))}
          </div>
        </div>
      </div>
    </div>
  );
}

Object.assign(window, { Sidebar, Topbar, KPI, Home });
