/* screen_comercial_daily_briefing_carteira_v2.jsx
   Daily Briefing Carteira V2 — Desvios ERP (consumíveis).
   Expõe window.ScreenDailyBriefingCarteiraV2. */

// ── Helpers ───────────────────────────────────────────────────────────────────
const bcv2FmtK = v => {
  const n = Number(v) || 0;
  if (Math.abs(n) >= 1000) return (n / 1000).toFixed(1).replace('.', ',') + 'k';
  return n.toFixed(0);
};
const bcv2FmtEur = v => `${bcv2FmtK(v)}€`;
const bcv2VarPct = (v26, v25) => v25 > 0 ? ((v26 - v25) / v25 * 100) : (v26 > 0 ? 100 : 0);

const MESES = ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'];

// Cores semânticas
const C = {
  green:  'var(--dgd-green-700,#1F8A52)',
  red:    'var(--dgd-red-700,#B53B3B)',
  amber:  'var(--dgd-pumpkin-500,#FF9A40)',
  blue:   'var(--dgd-primary-500,#61A9FF)',
  fg1:    'var(--dgd-fg-1)',
  fg2:    'var(--dgd-fg-2)',
  fg3:    'var(--dgd-fg-3)',
  border: 'var(--dgd-border-1)',
  surf:   'var(--dgd-bg-surface)',
  app:    'var(--dgd-bg-app)',
};

// ── CV Badge ──────────────────────────────────────────────────────────────────
const CvBadge = ({ label }) => {
  if (!label || label === 'Sem historial') return null;
  const color = label === 'Regular' ? C.green : label === 'Sazonal' ? C.amber : C.red;
  return (
    <span style={{
      display: 'inline-flex', alignItems: 'center', gap: 3,
      fontSize: 10, fontWeight: 600, padding: '2px 7px', borderRadius: 4,
      background: `color-mix(in oklch, ${color} 15%, transparent)`,
      color, border: `1px solid color-mix(in oklch, ${color} 30%, transparent)`,
    }}>● {label}</span>
  );
};

// ── Urgência Badge ────────────────────────────────────────────────────────────
const UrgBadge = ({ u }) => {
  const cfg = {
    hoje:        { color: C.red,   label: 'HOJE' },
    semana:      { color: C.amber, label: 'SEMANA' },
    monitorizar: { color: C.fg3,   label: 'MONITOR' },
  }[u] || { color: C.fg3, label: u || '—' };
  return (
    <span style={{
      fontSize: 9, fontWeight: 700, padding: '2px 6px', borderRadius: 3, letterSpacing: '0.06em',
      background: `color-mix(in oklch, ${cfg.color} 15%, transparent)`, color: cfg.color,
    }}>{cfg.label}</span>
  );
};

// ── Bloco badge numerado ──────────────────────────────────────────────────────
const BlocoBadge = ({ n, color = C.blue }) => (
  <span style={{
    display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
    width: 20, height: 20, borderRadius: 4,
    background: `color-mix(in oklch, ${color} 20%, transparent)`,
    color, fontSize: 11, fontWeight: 700, marginRight: 8, flexShrink: 0,
  }}>{n}</span>
);

// ── AcaoBadge ─────────────────────────────────────────────────────────────────
const acaoColors = [C.green, C.blue, C.amber, C.red];
const AcaoBadge = ({ n }) => {
  const color = acaoColors[(n - 1) % acaoColors.length];
  return (
    <span style={{
      display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
      width: 22, height: 22, borderRadius: '50%',
      background: `color-mix(in oklch, ${color} 20%, transparent)`,
      color, fontSize: 11, fontWeight: 700, flexShrink: 0,
    }}>{n}</span>
  );
};

// ── Cabeçalho de tabela ───────────────────────────────────────────────────────
const TH = { textAlign: 'left', padding: '6px 8px', fontSize: 10, color: C.fg3, fontFamily: 'var(--dgd-font-mono)', fontWeight: 600, textTransform: 'uppercase' };

// ── Hero ──────────────────────────────────────────────────────────────────────
const BriefV2Hero = ({ date, onRegenerate, loading, brief, userName }) => {
  const firstName = (userName || '').split(' ')[0] || '';
  const titulo = brief?.hero?.titulo || 'análise de desvios da carteira.';
  const subtitulo = brief?.hero?.subtitulo || null;
  return (
    <div style={{ background: C.surf, borderRadius: 10, padding: '24px 28px', marginBottom: 24, boxShadow: 'var(--dgd-shadow-card)' }}>
      <div style={{ display: 'flex', alignItems: 'flex-start', justifyContent: 'space-between', gap: 16 }}>
        <div style={{ minWidth: 0 }}>
          <div style={{ fontSize: 10, fontFamily: 'var(--dgd-font-mono)', color: C.fg3, letterSpacing: '0.1em', textTransform: 'uppercase', marginBottom: 6 }}>
            COMERCIAL · CONSUMÍVEIS · CARTEIRA V2 · DESVIOS ERP
          </div>
          <h1 style={{ margin: 0, fontSize: 24, fontWeight: 700, fontFamily: 'var(--font-display,Montserrat,sans-serif)', color: C.fg1, lineHeight: 1.2, letterSpacing: '-0.01em' }}>
            {firstName ? `${firstName}, ` : ''}{titulo}
          </h1>
          {subtitulo && (
            <p style={{ margin: '8px 0 0', fontSize: 13, color: C.fg2, lineHeight: 1.6 }}>{subtitulo}</p>
          )}
          <div style={{ marginTop: 10, display: 'inline-flex', alignItems: 'center', gap: 8, padding: '4px 12px',
            background: 'color-mix(in oklch, var(--dgd-primary-500,#61A9FF) 8%, transparent)', borderRadius: 4, fontSize: 10,
            fontFamily: 'var(--dgd-font-mono)', letterSpacing: '0.12em', color: C.blue }}>
            ⚡ DIGI · AGENTE AI DIGIDELTA
          </div>
        </div>
        <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-end', gap: 6, flexShrink: 0 }}>
          <button onClick={onRegenerate} disabled={loading}
            style={{ padding: '8px 16px', fontSize: 12, borderRadius: 6, border: `1px solid ${C.border}`,
              background: C.app, color: C.fg2,
              cursor: loading ? 'not-allowed' : 'pointer', opacity: loading ? 0.5 : 1 }}>
            {loading ? 'A gerar…' : 'Regenerar'}
          </button>
          <div style={{ fontSize: 11, color: C.fg3 }}>{date}</div>
        </div>
      </div>
    </div>
  );
};

// ── KPI Cards ─────────────────────────────────────────────────────────────────
const BriefV2KPIs = ({ metricas }) => {
  if (!metricas) return null;
  const { total_2025, total_2026, var_pct_total, valor_em_risco, n_ausentes, n_em_queda, fat_ytd, bp_acum, gap_bp, mes_corrente } = metricas;
  const mesCorrStr = MESES[(mes_corrente || 1) - 1];
  const cards = [
    {
      label: `Carteira YTD Jan–${mesCorrStr} 2026`,
      value: bcv2FmtEur(total_2026),
      sub: `${bcv2FmtEur(total_2025)} em 2025 · ${var_pct_total >= 0 ? '+' : ''}${var_pct_total?.toFixed(1)}%`,
      color: (var_pct_total || 0) >= 0 ? C.green : C.red,
    },
    {
      label: 'Faturado YTD vs BP',
      value: `${(gap_bp || 0) >= 0 ? '+' : ''}${bcv2FmtEur(gap_bp)}`,
      sub: `${bcv2FmtEur(fat_ytd)} faturados · obj ${bcv2FmtEur(bp_acum)}`,
      color: (gap_bp || 0) >= 0 ? C.green : C.red,
    },
    {
      label: 'Valor em Risco',
      value: bcv2FmtEur(valor_em_risco),
      sub: `${n_ausentes || 0} ausentes + ${n_em_queda || 0} em queda`,
      color: (valor_em_risco || 0) > 0 ? C.red : C.fg3,
    },
    {
      label: 'Clientes Ausentes',
      value: n_ausentes || 0,
      sub: 'compraram em 2025, zero em 2026',
      color: (n_ausentes || 0) > 0 ? C.red : C.green,
    },
  ];
  return (
    <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(160px, 1fr))', gap: 12, marginBottom: 24 }}>
      {cards.map((c, i) => (
        <div key={i} style={{ background: 'var(--dgd-bg-surface)', border: '1px solid var(--dgd-border-1)', borderRadius: 8, padding: '14px 16px' }}>
          <div style={{ fontSize: 10, color: C.fg3, fontFamily: 'var(--dgd-font-mono)', letterSpacing: '0.06em', marginBottom: 6, textTransform: 'uppercase' }}>{c.label}</div>
          <div style={{ fontSize: 22, fontWeight: 700, color: c.color, fontFamily: 'var(--font-display,Montserrat,sans-serif)' }}>{c.value}</div>
          <div style={{ fontSize: 11, color: C.fg3, marginTop: 4 }}>{c.sub}</div>
        </div>
      ))}
    </div>
  );
};

// ── Estilo nome clicável ──────────────────────────────────────────────────────
const clickStyle = {
  cursor: 'pointer', color: 'var(--dgd-primary-500,#61A9FF)',
  textDecoration: 'underline dotted', fontWeight: 600,
};

// ── Bloco 1 — Ausentes ────────────────────────────────────────────────────────
const BriefV2Bloco1 = ({ bloco1, onClienteClick }) => {
  if (!bloco1) return null;
  const ausentes = bloco1.ausentes || [];
  return (
    <div style={{ background: C.surf, border: `1px solid ${C.border}`, borderRadius: 8, padding: '20px 24px', marginBottom: 16 }}>
      <div style={{ display: 'flex', alignItems: 'center', marginBottom: 12 }}>
        <BlocoBadge n={1} color={C.red} />
        <span style={{ fontSize: 10, fontFamily: 'var(--dgd-font-mono)', color: C.fg3, letterSpacing: '0.1em', textTransform: 'uppercase' }}>CLIENTES AUSENTES — ZERO EM 2026</span>
      </div>
      {bloco1.narrativa && <p style={{ margin: '0 0 16px', fontSize: 13, color: C.fg2, lineHeight: 1.6 }}>{bloco1.narrativa}</p>}
      {ausentes.length > 0 && (
        <table style={{ width: '100%', borderCollapse: 'collapse', marginBottom: 16 }}>
          <thead>
            <tr style={{ borderBottom: `1px solid ${C.border}` }}>
              {['Cliente', '2025 (ref.)', '2026', 'CV', 'Famílias', 'Urgência', 'Coaching'].map(h => (
                <th key={h} style={TH}>{h}</th>
              ))}
            </tr>
          </thead>
          <tbody>
            {ausentes.map((a, i) => (
              <tr key={i} style={{ borderBottom: `1px solid ${C.border}` }}>
                <td style={{ padding: '8px', fontSize: 12 }}><span style={clickStyle} onClick={() => onClienteClick && onClienteClick(a.cliente)}>{a.cliente}</span></td>
                <td style={{ padding: '8px', fontSize: 12, color: C.fg3 }}>{bcv2FmtEur(a.val_2025)}</td>
                <td style={{ padding: '8px', fontSize: 12, fontWeight: 700, color: C.red }}>0€</td>
                <td style={{ padding: '8px' }}><CvBadge label={a.cv_label} /></td>
                <td style={{ padding: '8px', fontSize: 11, color: C.fg3 }}>{(a.familias || []).slice(0, 2).join(', ')}</td>
                <td style={{ padding: '8px' }}><UrgBadge u={a.urgencia} /></td>
                <td style={{ padding: '8px', fontSize: 11, color: C.fg2, maxWidth: 280 }}>{a.coaching}</td>
              </tr>
            ))}
          </tbody>
        </table>
      )}
      {bloco1.acoes?.length > 0 && (
        <div>
          {bloco1.acoes.map(a => (
            <div key={a.n} style={{ display: 'flex', gap: 10, marginBottom: 8, alignItems: 'flex-start' }}>
              <AcaoBadge n={a.n} />
              <span style={{ fontSize: 13, color: C.fg2, lineHeight: 1.5 }}>{a.texto}</span>
            </div>
          ))}
        </div>
      )}
    </div>
  );
};

// ── Bloco 2 — Em Queda ────────────────────────────────────────────────────────
const BriefV2Bloco2 = ({ bloco2, onClienteClick }) => {
  if (!bloco2) return null;
  const em_queda = bloco2.em_queda || [];
  return (
    <div style={{ background: C.surf, border: `1px solid ${C.border}`, borderRadius: 8, padding: '20px 24px', marginBottom: 16 }}>
      <div style={{ display: 'flex', alignItems: 'center', marginBottom: 12 }}>
        <BlocoBadge n={2} color={C.amber} />
        <span style={{ fontSize: 10, fontFamily: 'var(--dgd-font-mono)', color: C.fg3, letterSpacing: '0.1em', textTransform: 'uppercase' }}>CLIENTES EM QUEDA — DESVIO NEGATIVO SIGNIFICATIVO</span>
      </div>
      {bloco2.narrativa && <p style={{ margin: '0 0 16px', fontSize: 13, color: C.fg2, lineHeight: 1.6 }}>{bloco2.narrativa}</p>}
      {em_queda.length > 0 && (
        <table style={{ width: '100%', borderCollapse: 'collapse', marginBottom: 16 }}>
          <thead>
            <tr style={{ borderBottom: `1px solid ${C.border}` }}>
              {['Cliente', '2025 (ref.)', '2026', 'Desvio %', 'Desvio €', 'CV', 'Famílias em queda', 'Urgência', 'Coaching'].map(h => (
                <th key={h} style={TH}>{h}</th>
              ))}
            </tr>
          </thead>
          <tbody>
            {em_queda.map((q, i) => (
              <tr key={i} style={{ borderBottom: `1px solid ${C.border}` }}>
                <td style={{ padding: '8px', fontSize: 12 }}><span style={clickStyle} onClick={() => onClienteClick && onClienteClick(q.cliente)}>{q.cliente}</span></td>
                <td style={{ padding: '8px', fontSize: 12, color: C.fg3 }}>{bcv2FmtEur(q.val_2025)}</td>
                <td style={{ padding: '8px', fontSize: 12, color: C.fg2 }}>{bcv2FmtEur(q.val_2026)}</td>
                <td style={{ padding: '8px', fontSize: 12, fontWeight: 700, color: C.red }}>{q.var_pct?.toFixed(1)}%</td>
                <td style={{ padding: '8px', fontSize: 12, fontWeight: 700, color: C.red }}>{bcv2FmtEur(q.desvio_eur)}</td>
                <td style={{ padding: '8px' }}><CvBadge label={q.cv_label} /></td>
                <td style={{ padding: '8px', fontSize: 11, color: C.fg3 }}>{(q.familias_queda || []).slice(0, 2).join(', ')}</td>
                <td style={{ padding: '8px' }}><UrgBadge u={q.urgencia} /></td>
                <td style={{ padding: '8px', fontSize: 11, color: C.fg2, maxWidth: 260 }}>{q.coaching}</td>
              </tr>
            ))}
          </tbody>
        </table>
      )}
      {bloco2.acoes?.length > 0 && (
        <div>
          {bloco2.acoes.map(a => (
            <div key={a.n} style={{ display: 'flex', gap: 10, marginBottom: 8, alignItems: 'flex-start' }}>
              <AcaoBadge n={a.n} />
              <span style={{ fontSize: 13, color: C.fg2, lineHeight: 1.5 }}>{a.texto}</span>
            </div>
          ))}
        </div>
      )}
    </div>
  );
};

// ── Bloco 3 — Crescimento ─────────────────────────────────────────────────────
const BriefV2Bloco3 = ({ bloco3, onClienteClick }) => {
  if (!bloco3) return null;
  const crescimento = bloco3.crescimento || [];
  return (
    <div style={{ background: C.surf, border: `1px solid ${C.border}`, borderRadius: 8, padding: '20px 24px', marginBottom: 16 }}>
      <div style={{ display: 'flex', alignItems: 'center', marginBottom: 12 }}>
        <BlocoBadge n={3} color={C.green} />
        <span style={{ fontSize: 10, fontFamily: 'var(--dgd-font-mono)', color: C.fg3, letterSpacing: '0.1em', textTransform: 'uppercase' }}>CLIENTES EM CRESCIMENTO — CONSOLIDAR E EXPANDIR</span>
      </div>
      {bloco3.narrativa && <p style={{ margin: '0 0 16px', fontSize: 13, color: C.fg2, lineHeight: 1.6 }}>{bloco3.narrativa}</p>}
      {crescimento.length > 0 && (
        <table style={{ width: '100%', borderCollapse: 'collapse' }}>
          <thead>
            <tr style={{ borderBottom: `1px solid ${C.border}` }}>
              {['Cliente', '2025 (ref.)', '2026', 'Crescimento %', 'Upside €', 'Famílias em alta', 'Oportunidade'].map(h => (
                <th key={h} style={TH}>{h}</th>
              ))}
            </tr>
          </thead>
          <tbody>
            {crescimento.map((c, i) => (
              <tr key={i} style={{ borderBottom: `1px solid ${C.border}` }}>
                <td style={{ padding: '8px', fontSize: 12 }}><span style={clickStyle} onClick={() => onClienteClick && onClienteClick(c.cliente)}>{c.cliente}</span></td>
                <td style={{ padding: '8px', fontSize: 12, color: C.fg3 }}>{bcv2FmtEur(c.val_2025)}</td>
                <td style={{ padding: '8px', fontSize: 12, color: C.fg2 }}>{bcv2FmtEur(c.val_2026)}</td>
                <td style={{ padding: '8px', fontSize: 12, fontWeight: 700, color: C.green }}>+{c.var_pct?.toFixed(1)}%</td>
                <td style={{ padding: '8px', fontSize: 12, fontWeight: 600, color: C.green }}>{bcv2FmtEur(c.val_2026 - c.val_2025)}</td>
                <td style={{ padding: '8px', fontSize: 11, color: C.fg3 }}>{(c.familias_crescimento || []).slice(0, 2).join(', ')}</td>
                <td style={{ padding: '8px', fontSize: 11, color: C.blue, maxWidth: 260 }}>{c.oportunidade}</td>
              </tr>
            ))}
          </tbody>
        </table>
      )}
    </div>
  );
};

// ── Bloco 4 — Acções AI + Conclusão ──────────────────────────────────────────
const BriefV2Bloco4 = ({ bloco4, onClienteClick }) => {
  if (!bloco4) return null;
  const tipoColor = { ausente: C.red, queda: C.amber, crescimento: C.green };
  return (
    <div style={{ background: C.surf, border: `1px solid ${C.border}`, borderRadius: 8, padding: '20px 24px', marginBottom: 16 }}>
      <div style={{ display: 'flex', alignItems: 'center', marginBottom: 12 }}>
        <BlocoBadge n={4} color={C.blue} />
        <span style={{ fontSize: 10, fontFamily: 'var(--dgd-font-mono)', color: C.fg3, letterSpacing: '0.1em', textTransform: 'uppercase' }}>ACÇÕES PRIORITÁRIAS &amp; COACHING</span>
      </div>

      {bloco4.regra_do_dia && (
        <div style={{ margin: '0 0 16px', padding: '12px 16px', borderRadius: 6, borderLeft: `3px solid ${C.blue}`,
          background: `color-mix(in oklch, ${C.blue} 6%, transparent)`,
          fontSize: 13, color: C.fg1, fontStyle: 'italic', lineHeight: 1.6 }}>
          {bloco4.regra_do_dia}
        </div>
      )}

      {bloco4.acoes_prioritarias?.length > 0 && (
        <div style={{ marginBottom: 16 }}>
          {bloco4.acoes_prioritarias.map(a => (
            <div key={a.n} style={{ display: 'flex', gap: 10, marginBottom: 12, alignItems: 'flex-start',
              padding: '10px 14px', borderRadius: 6, background: C.app, border: `1px solid ${C.border}` }}>
              <AcaoBadge n={a.n} />
              <div style={{ flex: 1, minWidth: 0 }}>
                <div style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: 4, flexWrap: 'wrap' }}>
                  <span style={clickStyle} onClick={() => onClienteClick && onClienteClick(a.cliente)}>{a.cliente}</span>
                  {a.tipo && (
                    <span style={{
                      fontSize: 9, fontWeight: 700, padding: '1px 6px', borderRadius: 3, letterSpacing: '0.06em',
                      textTransform: 'uppercase',
                      background: `color-mix(in oklch, ${tipoColor[a.tipo] || C.fg3} 15%, transparent)`,
                      color: tipoColor[a.tipo] || C.fg3,
                    }}>{a.tipo}</span>
                  )}
                  <UrgBadge u={a.quando} />
                </div>
                <div style={{ fontSize: 12, color: C.fg2, lineHeight: 1.5 }}>{a.acao}</div>
              </div>
            </div>
          ))}
        </div>
      )}

      {bloco4.conclusao && (
        <p style={{ margin: 0, fontSize: 13, color: C.fg2, lineHeight: 1.6, borderTop: `1px solid ${C.border}`, paddingTop: 16 }}>
          {bloco4.conclusao}
        </p>
      )}
    </div>
  );
};

// ── Loading / Error states ────────────────────────────────────────────────────
const V2Loading = () => (
  <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: 16, padding: '64px 0' }}>
    <div style={{ fontSize: 13, color: 'var(--dgd-fg-3)' }}>A analisar desvios ERP da carteira…</div>
    <div style={{ fontSize: 11, color: 'var(--dgd-fg-3)', fontFamily: 'var(--dgd-font-mono)' }}>⚡ Digi AI · a calcular</div>
  </div>
);

// ── Screen principal ──────────────────────────────────────────────────────────
function ScreenDailyBriefingCarteiraV2({ vendedorId, userName }) {
  const [state, setState] = React.useState({ data: null, loading: false, error: null });
  const [selectedCliente, setSelectedCliente] = React.useState(null);
  const onClienteClick = (nome) => nome && setSelectedCliente(nome);

  const fetchBrief = React.useCallback((force = false) => {
    if (!vendedorId) return;
    setState(s => ({ ...s, loading: true, error: null }));
    fetch(`/api/comercial/brief-carteira-v2/${encodeURIComponent(vendedorId)}${force ? '?force=true' : ''}`)
      .then(r => r.json())
      .then(json => {
        if (json.error) throw new Error(json.error);
        setState({ data: json, loading: false, error: null });
      })
      .catch(err => setState({ data: null, loading: false, error: err.message }));
  }, [vendedorId]);

  React.useEffect(() => { fetchBrief(false); }, [fetchBrief]);

  const { data, loading, error } = state;
  const brief = data?.brief || null;
  const metricas = data?.metricas || null;
  const today = new Date().toLocaleDateString('pt-PT', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });

  if (!vendedorId) return (
    <div style={{ padding: 32, color: 'var(--dgd-fg-3)', fontSize: 13 }}>Sem vendedor seleccionado.</div>
  );

  return (
    <div className="scrollbar" style={{ height: '100%', overflowY: 'auto', padding: '28px 32px 80px' }}>
      {(() => { const M = window.ProspectClienteModal; return M && selectedCliente ? <M nome={selectedCliente} userName={userName} onClose={() => setSelectedCliente(null)} /> : null; })()}
      <BriefV2Hero
        date={today}
        onRegenerate={() => fetchBrief(true)}
        loading={loading}
        brief={brief}
        userName={userName}
      />

      {loading && !data && <V2Loading />}

      {error && (
        <div style={{ padding: '16px 20px', borderRadius: 8, background: `color-mix(in oklch, ${C.red} 10%, transparent)`,
          border: `1px solid color-mix(in oklch, ${C.red} 25%, transparent)`, color: C.red, fontSize: 13, marginBottom: 16 }}>
          Erro ao gerar brief: {error}
        </div>
      )}

      {brief?._parse_error && (
        <div style={{ padding: '12px 16px', borderRadius: 6, background: `color-mix(in oklch, ${C.amber} 10%, transparent)`,
          border: `1px solid color-mix(in oklch, ${C.amber} 25%, transparent)`, color: C.amber, fontSize: 12, marginBottom: 16 }}>
          Aviso: resposta AI com erro de parsing. A tentar regenerar automaticamente.
        </div>
      )}

      {metricas && <BriefV2KPIs metricas={metricas} />}
      {brief?.bloco1 && <BriefV2Bloco1 bloco1={brief.bloco1} onClienteClick={onClienteClick} />}
      {brief?.bloco2 && <BriefV2Bloco2 bloco2={brief.bloco2} onClienteClick={onClienteClick} />}
      {brief?.bloco3 && <BriefV2Bloco3 bloco3={brief.bloco3} onClienteClick={onClienteClick} />}
      {brief?.bloco4 && <BriefV2Bloco4 bloco4={brief.bloco4} onClienteClick={onClienteClick} />}

      {data && (
        <div style={{ fontSize: 10, color: C.fg3, fontFamily: 'var(--dgd-font-mono)', textAlign: 'right', marginTop: 8 }}>
          {data.cached ? 'Cache' : 'Gerado agora'} · fonte: ERP Primavera (comercial_ytd_snap)
        </div>
      )}
    </div>
  );
}

window.ScreenDailyBriefingCarteiraV2 = ScreenDailyBriefingCarteiraV2;
