/* screen_comercial_daily_prospect_carteira.jsx
   Daily Prospect Carteira — consumíveis. Expõe window.ScreenDailyProspectCarteira. */

const urgColor = { fire: 'var(--dgd-red-700,#B53B3B)', warn: 'var(--dgd-pumpkin-500,#FF9A40)', normal: 'var(--dgd-fg-3)' };

// ── Badge numerado (headers dos blocos) ───────────────────────────────────────
const PBlocoBadge = ({ n, color = 'var(--dgd-primary-500,#61A9FF)' }) => (
  <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>
);

// ── Badge de acção numerada ────────────────────────────────────────────────────
const pAcaoBadgeColor = ['var(--dgd-green-700,#1F8A52)', 'var(--dgd-primary-500,#61A9FF)', 'var(--dgd-pumpkin-500,#FF9A40)', 'var(--dgd-red-700,#B53B3B)'];
const PAcaoBadge = ({ n }) => {
  const color = pAcaoBadgeColor[(n - 1) % pAcaoBadgeColor.length] || 'var(--dgd-primary-500,#61A9FF)';
  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>
  );
};
const fmtEur2 = v => {
  const n = Number(v) || 0;
  if (Math.abs(n) >= 1000) return (n / 1000).toFixed(1).replace('.', ',') + 'k€';
  return n.toFixed(0) + '€';
};

// ── Hero ──────────────────────────────────────────────────────────────────────
const ProspectCarteiraHero = ({ vendedorId, date, onRegenerate, loading, userName }) => {
  const firstName = (userName || '').split(' ')[0] || '';
  return (
    <div style={{ background: 'var(--dgd-bg-surface)', 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: 'var(--dgd-fg-3)', letterSpacing: '0.1em', textTransform: 'uppercase', marginBottom: 6 }}>
            COMERCIAL · CONSUMÍVEIS · PROSPECÇÃO
          </div>
          <h1 style={{ margin: 0, fontSize: 24, fontWeight: 700, fontFamily: 'var(--font-display,Montserrat,sans-serif)', color: 'var(--dgd-fg-1)', lineHeight: 1.2, letterSpacing: '-0.01em' }}>
            {firstName ? `${firstName}, ` : ''}aqui estão as tuas oportunidades de hoje.
          </h1>
          <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: 'var(--dgd-primary-500,#61A9FF)' }}>
            ⚡ 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 var(--dgd-border-1)',
              background: 'var(--dgd-bg-app)', color: 'var(--dgd-fg-2)', cursor: loading ? 'not-allowed' : 'pointer', opacity: loading ? 0.5 : 1 }}>
            {loading ? 'A gerar…' : 'Regenerar'}
          </button>
          <div style={{ fontSize: 11, color: 'var(--dgd-fg-3)' }}>{date}</div>
        </div>
      </div>
    </div>
  );
};

// ── KPI Cards ─────────────────────────────────────────────────────────────────
const ProspectCarteiraKPIs = ({ metricas }) => {
  if (!metricas) return null;
  const cards = [
    { label: 'G2 — Em Risco', value: metricas.g2_count || 0, color: 'var(--dgd-red-700,#B53B3B)' },
    { label: 'G3 — Inativos', value: metricas.g3_count || 0, color: 'var(--dgd-fg-2)' },
    { label: 'G1 — Mono-família', value: metricas.g1_mono_fam_count || 0, color: 'var(--dgd-pumpkin-500,#FF9A40)' },
    { label: 'SPIN Prospects', value: metricas.spin_count || 0, color: 'var(--dgd-primary-500,#61A9FF)' },
  ];
  return (
    <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(140px, 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: 'var(--dgd-fg-3)', fontFamily: 'var(--dgd-font-mono)', textTransform: 'uppercase', letterSpacing: '0.06em', marginBottom: 6 }}>{c.label}</div>
          <div style={{ fontSize: 28, fontWeight: 700, color: c.color, fontFamily: 'var(--font-display,Montserrat,sans-serif)' }}>{c.value}</div>
        </div>
      ))}
    </div>
  );
};

// ── Bloco 1 — Narrativa + prioridades ─────────────────────────────────────────
const ProspectCarteiraBloco1 = ({ bloco1 }) => {
  if (!bloco1) return null;
  return (
    <div style={{ background: 'var(--dgd-bg-surface)', border: '1px solid var(--dgd-border-1)', borderRadius: 8, padding: '20px 24px', marginBottom: 16 }}>
      <div style={{ display: 'flex', alignItems: 'center', marginBottom: 12 }}>
        <PBlocoBadge n={1} color="var(--dgd-primary-500,#61A9FF)" />
        <span style={{ fontSize: 10, fontFamily: 'var(--dgd-font-mono)', color: 'var(--dgd-fg-3)', letterSpacing: '0.1em', textTransform: 'uppercase' }}>LEITURA DO DIA</span>
      </div>
      {bloco1.narrativa && <p style={{ margin: '0 0 16px', fontSize: 13, color: 'var(--dgd-fg-2)', lineHeight: 1.6 }}>{bloco1.narrativa}</p>}
      {bloco1.acoes?.map((a, i) => {
        const uColor = urgColor[a.urgencia] || 'var(--dgd-fg-3)';
        return (
          <div key={i} style={{ display: 'flex', gap: 10, marginBottom: 8, padding: '10px 12px', background: 'var(--dgd-bg-app)', borderRadius: 6, borderLeft: `3px solid ${uColor}`, alignItems: 'flex-start' }}>
            <PAcaoBadge n={i + 1} />
            <div>
              <div style={{ fontSize: 13, fontWeight: 600, color: 'var(--dgd-fg-1)', marginBottom: 2 }}>{a.titulo}</div>
              <div style={{ fontSize: 12, color: 'var(--dgd-fg-3)' }}>{a.detalhe}</div>
            </div>
          </div>
        );
      })}
    </div>
  );
};

// ── Bloco 2 — G2 Recuperação ──────────────────────────────────────────────────
const ProspectCarteiraBloco2 = ({ rows }) => {
  if (!rows?.length) return null;
  return (
    <div style={{ background: 'var(--dgd-bg-surface)', border: '1px solid var(--dgd-border-1)', borderRadius: 8, padding: '20px 24px', marginBottom: 16 }}>
      <div style={{ display: 'flex', alignItems: 'center', marginBottom: 12 }}>
        <PBlocoBadge n={2} color="var(--dgd-red-700,#B53B3B)" />
        <span style={{ fontSize: 10, fontFamily: 'var(--dgd-font-mono)', color: 'var(--dgd-fg-3)', letterSpacing: '0.1em', textTransform: 'uppercase' }}>G2 — RECUPERAÇÃO (60–90 DIAS)</span>
      </div>
      <table style={{ width: '100%', borderCollapse: 'collapse' }}>
        <thead>
          <tr style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
            {['', 'Cliente', 'Dias', 'Valor 12m', 'Motivo', 'Acção', 'Quando'].map(h => (
              <th key={h} style={{ textAlign: 'left', padding: '6px 8px', fontSize: 10, color: 'var(--dgd-fg-3)', fontFamily: 'var(--dgd-font-mono)', fontWeight: 600, textTransform: 'uppercase' }}>{h}</th>
            ))}
          </tr>
        </thead>
        <tbody>
          {rows.map((r, i) => (
            <tr key={i} style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
              <td style={{ padding: '8px' }}>
                <span style={{ width: 8, height: 8, borderRadius: '50%', display: 'inline-block', background: urgColor[r.urgencia] || 'var(--dgd-fg-3)' }} />
              </td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-1)', fontWeight: 600 }}>{r.cliente}</td>
              <td style={{ padding: '8px', fontSize: 12, fontWeight: 700, color: r.dias > 80 ? 'var(--dgd-red-700,#B53B3B)' : r.dias > 60 ? 'var(--dgd-pumpkin-500,#FF9A40)' : 'var(--dgd-fg-2)' }}>{r.dias}</td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-green-700,#1F8A52)', fontWeight: 600 }}>{fmtEur2(r.valor_12m)}</td>
              <td style={{ padding: '8px', fontSize: 11, color: 'var(--dgd-fg-3)', maxWidth: 160 }}>{r.motivo}</td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-2)', maxWidth: 200 }}>{r.acao}</td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-3)', whiteSpace: 'nowrap' }}>{r.quando}</td>
            </tr>
          ))}
        </tbody>
      </table>
    </div>
  );
};

// ── Bloco 3 — G3 Reactivação ──────────────────────────────────────────────────
const ProspectCarteiraBloco3 = ({ rows }) => {
  if (!rows?.length) return null;
  return (
    <div style={{ background: 'var(--dgd-bg-surface)', border: '1px solid var(--dgd-border-1)', borderRadius: 8, padding: '20px 24px', marginBottom: 16 }}>
      <div style={{ display: 'flex', alignItems: 'center', marginBottom: 12 }}>
        <PBlocoBadge n={3} color="var(--dgd-fg-3)" />
        <span style={{ fontSize: 10, fontFamily: 'var(--dgd-font-mono)', color: 'var(--dgd-fg-3)', letterSpacing: '0.1em', textTransform: 'uppercase' }}>G3 — REACTIVAÇÃO (&gt;90 DIAS)</span>
      </div>
      <table style={{ width: '100%', borderCollapse: 'collapse' }}>
        <thead>
          <tr style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
            {['Cliente', 'Dias Inativo', 'Valor Histórico', 'Acção'].map(h => (
              <th key={h} style={{ textAlign: 'left', padding: '6px 8px', fontSize: 10, color: 'var(--dgd-fg-3)', fontFamily: 'var(--dgd-font-mono)', fontWeight: 600, textTransform: 'uppercase' }}>{h}</th>
            ))}
          </tr>
        </thead>
        <tbody>
          {rows.map((r, i) => (
            <tr key={i} style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-1)', fontWeight: 600 }}>{r.cliente}</td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-3)' }}>{r.dias_inativo}</td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-2)' }}>{fmtEur2(r.valor_historico)}</td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-2)' }}>{r.acao}</td>
            </tr>
          ))}
        </tbody>
      </table>
    </div>
  );
};

// ── Bloco 4 — Cross-sell ──────────────────────────────────────────────────────
const ProspectCarteiraBloco4 = ({ rows }) => {
  if (!rows?.length) return null;
  return (
    <div style={{ background: 'var(--dgd-bg-surface)', border: '1px solid var(--dgd-border-1)', borderRadius: 8, padding: '20px 24px', marginBottom: 16 }}>
      <div style={{ display: 'flex', alignItems: 'center', marginBottom: 12 }}>
        <PBlocoBadge n={4} color="var(--dgd-pumpkin-500,#FF9A40)" />
        <span style={{ fontSize: 10, fontFamily: 'var(--dgd-font-mono)', color: 'var(--dgd-fg-3)', letterSpacing: '0.1em', textTransform: 'uppercase' }}>CROSS-SELL — G1 MONO-FAMÍLIA</span>
      </div>
      <table style={{ width: '100%', borderCollapse: 'collapse' }}>
        <thead>
          <tr style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
            {['Cliente', 'Família Atual → Proposta', 'Valor Atual', 'Racional'].map(h => (
              <th key={h} style={{ textAlign: 'left', padding: '6px 8px', fontSize: 10, color: 'var(--dgd-fg-3)', fontFamily: 'var(--dgd-font-mono)', fontWeight: 600, textTransform: 'uppercase' }}>{h}</th>
            ))}
          </tr>
        </thead>
        <tbody>
          {rows.map((r, i) => (
            <tr key={i} style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-1)', fontWeight: 600 }}>{r.cliente}</td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-2)' }}>
                <span style={{ color: 'var(--dgd-fg-2)' }}>{r.familia_atual}</span>
                <span style={{ color: 'var(--dgd-primary-500,#61A9FF)', margin: '0 6px' }}>→</span>
                <span style={{ color: 'var(--dgd-pumpkin-500,#FF9A40)', fontWeight: 600 }}>{r.familia_proposta}</span>
              </td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-green-700,#1F8A52)', fontWeight: 600 }}>{fmtEur2(r.valor_atual)}</td>
              <td style={{ padding: '8px', fontSize: 11, color: 'var(--dgd-fg-3)', maxWidth: 260 }}>{r.racional}</td>
            </tr>
          ))}
        </tbody>
      </table>
    </div>
  );
};

// ── Bloco 5 — SPIN ────────────────────────────────────────────────────────────
const ProspectCarteiraBloco5 = ({ rows }) => {
  if (!rows?.length) return null;
  return (
    <div style={{ background: 'var(--dgd-bg-surface)', border: '1px solid var(--dgd-border-1)', borderRadius: 8, padding: '20px 24px', marginBottom: 16 }}>
      <div style={{ display: 'flex', alignItems: 'center', marginBottom: 12 }}>
        <PBlocoBadge n={5} color="var(--dgd-primary-500,#61A9FF)" />
        <span style={{ fontSize: 10, fontFamily: 'var(--dgd-font-mono)', color: 'var(--dgd-fg-3)', letterSpacing: '0.1em', textTransform: 'uppercase' }}>SPIN PROSPECTS</span>
      </div>
      <table style={{ width: '100%', borderCollapse: 'collapse' }}>
        <thead>
          <tr style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
            {['Entidade', 'Potencial', 'Famílias', 'Acção'].map(h => (
              <th key={h} style={{ textAlign: 'left', padding: '6px 8px', fontSize: 10, color: 'var(--dgd-fg-3)', fontFamily: 'var(--dgd-font-mono)', fontWeight: 600, textTransform: 'uppercase' }}>{h}</th>
            ))}
          </tr>
        </thead>
        <tbody>
          {rows.map((r, i) => (
            <tr key={i} style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-1)', fontWeight: 600 }}>{r.entidade}</td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-primary-500,#61A9FF)', fontWeight: 600 }}>{fmtEur2(r.potencial)}</td>
              <td style={{ padding: '8px', fontSize: 11, color: 'var(--dgd-fg-3)' }}>{(r.familias || []).join(', ')}</td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-2)' }}>{r.acao}</td>
            </tr>
          ))}
        </tbody>
      </table>
    </div>
  );
};

// ── Regra do Dia ──────────────────────────────────────────────────────────────
const ProspectCarteiraRegraDia = ({ texto }) => {
  if (!texto) return null;
  return (
    <div style={{ padding: '16px 20px', background: 'color-mix(in oklch, var(--dgd-primary-500,#61A9FF) 6%, transparent)', border: '1px solid color-mix(in oklch, var(--dgd-primary-500,#61A9FF) 25%, transparent)', borderRadius: 8, marginBottom: 16 }}>
      <div style={{ fontSize: 10, fontFamily: 'var(--dgd-font-mono)', color: 'var(--dgd-primary-500,#61A9FF)', letterSpacing: '0.1em', textTransform: 'uppercase', marginBottom: 8 }}>REGRA DO DIA</div>
      <div style={{ fontSize: 12.5, color: 'var(--dgd-fg-1)', lineHeight: 1.5 }}>{texto}</div>
    </div>
  );
};

// ── Main Screen ───────────────────────────────────────────────────────────────
const ScreenDailyProspectCarteira = ({ vendedorId, onNav, userName }) => {
  const [data, setData] = React.useState(null);
  const [loading, setLoading] = React.useState(true);
  const [error, setError] = React.useState(null);

  const load = React.useCallback((force = false) => {
    setLoading(true);
    setError(null);
    const params = new URLSearchParams(); if (vendedorId) params.set('vendedorId', vendedorId); if (force) params.set('force', 'true'); const qs = params.toString(); const url = `/api/comercial/prospect-carteira/today${qs ? '?' + qs : ''}`;
    fetch(url)
      .then(r => r.ok ? r.json() : r.json().then(e => Promise.reject(e.error || 'Erro desconhecido')))
      .then(d => { setData(d); setLoading(false); })
      .catch(e => { setError(String(e)); setLoading(false); });
  }, []);

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

  if (loading) return (
    <div style={{ padding: '28px 32px' }}>
      {[1, 2, 3].map(i => <div key={i} style={{ height: 80, background: 'var(--dgd-bg-surface)', borderRadius: 8, marginBottom: 16 }} />)}
    </div>
  );
  if (error) return (
    <div style={{ padding: '40px 32px', textAlign: 'center' }}>
      <div style={{ fontSize: 13, color: 'var(--dgd-red-700,#B53B3B)', marginBottom: 12 }}>Erro: {error}</div>
      <button className="btn btn-primary" onClick={() => load()}>Tentar novamente</button>
    </div>
  );
  if (!data) return null;

  const p = data.prospect_json || {};

  return (
    <div className="scrollbar" style={{ height: '100%', overflowY: 'auto', padding: '28px 32px 80px' }}>
      <ProspectCarteiraHero vendedorId={vendedorId} date={data.date} onRegenerate={() => load(true)} loading={loading} userName={userName} />
      <ProspectCarteiraKPIs metricas={data.metricas} />
      <ProspectCarteiraBloco1 bloco1={p.bloco1} />
      <ProspectCarteiraBloco2 rows={p.bloco2_g2} />
      <ProspectCarteiraBloco3 rows={p.bloco3_g3} />
      <ProspectCarteiraBloco4 rows={p.bloco4_crosssell} />
      <ProspectCarteiraBloco5 rows={p.bloco5_spin} />
      <ProspectCarteiraRegraDia texto={p.regra_do_dia} />
    </div>
  );
};

window.ScreenDailyProspectCarteira = ScreenDailyProspectCarteira;
