/* screen_comercial_daily_prospect_carteira_v2.jsx
   Prospect Carteira V2 — Expansão via share de famílias ERP (consumíveis).
   Expõe window.ScreenProspectCarteiraV2. */

// ── Helpers ───────────────────────────────────────────────────────────────────
const pcv2Fmt = v => {
  const n = Number(v) || 0;
  if (Math.abs(n) >= 1000) return (n / 1000).toFixed(1).replace('.', ',') + 'k€';
  return n.toFixed(0) + '€';
};

// Urgência → cor (igual ao daily_prospect_carteira)
const pcv2UrgColor = {
  hoje:        'var(--dgd-red-700,#B53B3B)',
  semana:      'var(--dgd-pumpkin-500,#FF9A40)',
  monitorizar: 'var(--dgd-fg-3)',
};

// Nome clicável — mesmo estilo do ecrã existente
const pcv2ClickNome = {
  fontWeight: 600, color: 'var(--dgd-fg-1)', cursor: 'pointer',
  borderBottom: '1px dashed var(--dgd-fg-3)', paddingBottom: 1,
};

// ── Badge numerado (header de bloco) ──────────────────────────────────────────
const Pcv2BlocoBadge = ({ 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 pcv2AcaoColors = [
  'var(--dgd-green-700,#1F8A52)',
  'var(--dgd-primary-500,#61A9FF)',
  'var(--dgd-pumpkin-500,#FF9A40)',
  'var(--dgd-red-700,#B53B3B)',
];
const Pcv2AcaoBadge = ({ n }) => {
  const color = pcv2AcaoColors[(n - 1) % pcv2AcaoColors.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>
  );
};

// ── Hero ──────────────────────────────────────────────────────────────────────
function Pcv2Hero({ date, onRegenerate, loading, prospect, userName }) {
  const firstName = (userName || '').split(' ')[0] || '';
  const mensagem = prospect?.hero?.mensagem || null;
  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 · EXPANSÃ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 oportunidades de expansão.
          </h1>
          {mensagem && (
            <p style={{ margin: '6px 0 0', fontSize: 13, color: 'var(--dgd-fg-3)', fontStyle: 'italic' }}>{mensagem}</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: '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 ─────────────────────────────────────────────────────────────────
function Pcv2KPIs({ metricas }) {
  if (!metricas) return null;
  const cards = [
    { label: 'Mono-família', value: metricas.mono_familia_count || 0, color: 'var(--dgd-primary-500,#61A9FF)' },
    { label: 'Famílias Perdidas', value: metricas.familias_perdidas_count || 0, color: 'var(--dgd-pumpkin-500,#FF9A40)' },
    { label: 'Novos Clientes', value: metricas.novos_clientes_count || 0, color: 'var(--dgd-green-700,#1F8A52)' },
    { label: 'Clientes Ativos', value: metricas.clientes_ativos || 0, color: 'var(--dgd-fg-2)' },
  ];
  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 — Mono-família cross-sell ─────────────────────────────────────────
function Pcv2Bloco1({ bloco1, onClienteClick }) {
  if (!bloco1?.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 }}>
        <Pcv2BlocoBadge 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',
        }}>CROSS-SELL — MONO-FAMÍLIA DE ALTO VOLUME</span>
      </div>
      <table style={{ width: '100%', borderCollapse: 'collapse' }}>
        <thead>
          <tr style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
            {['Cliente', 'YTD 2026', 'Família Atual → Proposta', 'Argumento', 'Urg.'].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>
          {bloco1.map((r, i) => (
            <tr key={i} style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
              <td style={{ padding: '8px' }}>
                <span style={pcv2ClickNome} onClick={() => onClienteClick(r.cliente)}>{r.cliente}</span>
              </td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-green-700,#1F8A52)', fontWeight: 600 }}>
                {pcv2Fmt(r.total_2026_k)}
              </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: 11, color: 'var(--dgd-fg-3)', maxWidth: 260 }}>{r.argumento}</td>
              <td style={{ padding: '8px' }}>
                <span style={{
                  display: 'inline-block', width: 8, height: 8, borderRadius: '50%',
                  background: pcv2UrgColor[r.urgencia] || 'var(--dgd-fg-3)',
                }} />
              </td>
            </tr>
          ))}
        </tbody>
      </table>
    </div>
  );
}

// ── Bloco 2 — Famílias perdidas ───────────────────────────────────────────────
function Pcv2Bloco2({ bloco2, onClienteClick }) {
  if (!bloco2?.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 }}>
        <Pcv2BlocoBadge n={2} 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',
        }}>FAMÍLIAS PERDIDAS — RECOVERY</span>
      </div>
      <table style={{ width: '100%', borderCollapse: 'collapse' }}>
        <thead>
          <tr style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
            {['Cliente', 'Família', 'Val. 2025', 'Abordagem'].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>
          {bloco2.map((r, i) => (
            <tr key={i} style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
              <td style={{ padding: '8px' }}>
                <span style={pcv2ClickNome} onClick={() => onClienteClick(r.cliente)}>{r.cliente}</span>
              </td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-pumpkin-500,#FF9A40)', fontWeight: 600 }}>{r.familia}</td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-2)' }}>{pcv2Fmt(r.val_2025_k ?? r.val_2025)}</td>
              <td style={{ padding: '8px', fontSize: 11, color: 'var(--dgd-fg-3)', maxWidth: 280 }}>{r.abordagem}</td>
            </tr>
          ))}
        </tbody>
      </table>
    </div>
  );
}

// ── Bloco 3 — Novos clientes ──────────────────────────────────────────────────
function Pcv2Bloco3({ bloco3, onClienteClick }) {
  if (!bloco3?.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 }}>
        <Pcv2BlocoBadge n={3} color="var(--dgd-green-700,#1F8A52)" />
        <span style={{
          fontSize: 10, fontFamily: 'var(--dgd-font-mono)', color: 'var(--dgd-fg-3)',
          letterSpacing: '0.1em', textTransform: 'uppercase',
        }}>NOVOS CLIENTES 2026 — JANELA QUENTE</span>
      </div>
      <table style={{ width: '100%', borderCollapse: 'collapse' }}>
        <thead>
          <tr style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
            {['Cliente', 'YTD 2026', 'Entrada por', 'Próxima Família', 'Janela'].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>
          {bloco3.map((r, i) => (
            <tr key={i} style={{ borderBottom: '1px solid var(--dgd-border-1)' }}>
              <td style={{ padding: '8px' }}>
                <span style={pcv2ClickNome} onClick={() => onClienteClick(r.cliente)}>{r.cliente}</span>
              </td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-green-700,#1F8A52)', fontWeight: 600 }}>
                {pcv2Fmt(r.val_2026_k)}
              </td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-fg-2)' }}>{r.familia_entrada || '—'}</td>
              <td style={{ padding: '8px', fontSize: 12, color: 'var(--dgd-pumpkin-500,#FF9A40)', fontWeight: 600 }}>
                {r.proxima_familia || '—'}
              </td>
              <td style={{ padding: '8px', fontSize: 11, color: 'var(--dgd-fg-3)', maxWidth: 220 }}>{r.janela}</td>
            </tr>
          ))}
        </tbody>
      </table>
    </div>
  );
}

// ── Bloco 4 — Acções da semana ────────────────────────────────────────────────
function Pcv2Bloco4({ bloco4, onClienteClick }) {
  if (!bloco4) return null;
  const acoes = bloco4.acoes_prioritarias || [];
  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 }}>
        <Pcv2BlocoBadge n={4} 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',
        }}>ACÇÕES DA SEMANA</span>
      </div>
      {bloco4.conclusao && (
        <p style={{ margin: '0 0 16px', fontSize: 13, color: 'var(--dgd-fg-2)', lineHeight: 1.6 }}>{bloco4.conclusao}</p>
      )}
      {acoes.map((a, i) => {
        const uColor = pcv2UrgColor[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',
          }}>
            <Pcv2AcaoBadge n={i + 1} />
            <div>
              <div style={{ fontSize: 13, fontWeight: 600, color: 'var(--dgd-fg-1)', marginBottom: 2 }}>
                {a.cliente && (
                  <span style={pcv2ClickNome} onClick={() => onClienteClick(a.cliente)}>
                    {a.cliente}
                  </span>
                )}
                {a.familia_proposta && (
                  <span style={{ color: 'var(--dgd-pumpkin-500,#FF9A40)', marginLeft: 6, fontWeight: 600 }}>
                    · {a.familia_proposta}
                  </span>
                )}
                {a.acao && <span style={{ fontWeight: 400, color: 'var(--dgd-fg-2)', marginLeft: 6 }}>— {a.acao}</span>}
              </div>
              {a.argumentos && (
                <div style={{ fontSize: 12, color: 'var(--dgd-fg-3)' }}>{a.argumentos}</div>
              )}
            </div>
          </div>
        );
      })}
    </div>
  );
}

// ── Regra do dia ──────────────────────────────────────────────────────────────
function Pcv2RegraDia({ 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 ───────────────────────────────────────────────────────────────
function ScreenProspectCarteiraV2({ vendedorId, userName }) {
  const [state, setState] = React.useState({ data: null, loading: false, error: null });
  const [selectedCliente, setSelectedCliente] = React.useState(null);
  const onClienteClick = name => setSelectedCliente(name);

  const fetchProspect = React.useCallback((force = false) => {
    if (!vendedorId) return;
    setState(s => ({ ...s, loading: true, error: null }));
    fetch(`/api/comercial/prospect-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(() => { fetchProspect(false); }, [fetchProspect]);

  const { data, loading, error } = state;
  const prospect = data?.prospect || null;
  const metricas = data?.metricas || null;
  const today = new Date().toISOString().slice(0, 10);

  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;
      })()}

      <Pcv2Hero
        date={today}
        onRegenerate={() => fetchProspect(true)}
        loading={loading}
        prospect={prospect}
        userName={userName}
      />

      {loading && !data && (
        <div style={{ padding: '40px 0', textAlign: 'center', color: 'var(--dgd-fg-3)', fontSize: 13 }}>
          A gerar prospect de expansão…
        </div>
      )}

      {error && (
        <div style={{
          padding: '16px 20px', borderRadius: 8, marginBottom: 16,
          background: 'color-mix(in oklch, var(--dgd-red-700,#B53B3B) 10%, transparent)',
          border: '1px solid color-mix(in oklch, var(--dgd-red-700,#B53B3B) 25%, transparent)',
          color: 'var(--dgd-red-700,#B53B3B)', fontSize: 13,
        }}>
          Erro ao gerar prospect: {error}
        </div>
      )}

      {prospect?._parse_error && (
        <div style={{
          padding: '12px 16px', borderRadius: 6, marginBottom: 16,
          background: 'color-mix(in oklch, var(--dgd-pumpkin-500,#FF9A40) 10%, transparent)',
          border: '1px solid color-mix(in oklch, var(--dgd-pumpkin-500,#FF9A40) 25%, transparent)',
          color: 'var(--dgd-pumpkin-500,#FF9A40)', fontSize: 12,
        }}>
          Aviso: resposta AI com erro de parsing.
        </div>
      )}

      {metricas && <Pcv2KPIs metricas={metricas} />}
      {prospect?.bloco4?.regra_do_dia && <Pcv2RegraDia texto={prospect.bloco4.regra_do_dia} />}
      {prospect?.bloco1 && <Pcv2Bloco1 bloco1={prospect.bloco1} onClienteClick={onClienteClick} />}
      {prospect?.bloco2 && <Pcv2Bloco2 bloco2={prospect.bloco2} onClienteClick={onClienteClick} />}
      {prospect?.bloco3 && <Pcv2Bloco3 bloco3={prospect.bloco3} onClienteClick={onClienteClick} />}
      {prospect?.bloco4 && <Pcv2Bloco4 bloco4={prospect.bloco4} onClienteClick={onClienteClick} />}

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

window.ScreenProspectCarteiraV2 = ScreenProspectCarteiraV2;
