/* CONTROLLING · helpers — formatters, badges, marcador "Validar Clara" */

window.CtrlHelpers = (() => {
  const fmtEUR = (n) => {
    if (n == null) return '—';
    const sign = n < 0 ? '-' : '';
    const abs = Math.abs(n);
    return sign + '€ ' + abs.toLocaleString('pt-PT', { minimumFractionDigits: 0, maximumFractionDigits: 0 });
  };
  const fmtEURcompact = (n) => {
    if (n == null) return '—';
    const abs = Math.abs(n);
    if (abs >= 1_000_000) return '€ ' + (n / 1_000_000).toFixed(2).replace('.', ',') + 'M';
    if (abs >= 1_000) return '€ ' + (n / 1_000).toFixed(0) + 'k';
    return '€ ' + n;
  };
  const fmtEURexact = (n) => {
    if (n == null) return '—';
    const sign = n < 0 ? '-' : '';
    const abs = Math.abs(n);
    return sign + '€ ' + abs.toLocaleString('pt-PT', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
  };

  const empresaChip = (id, opts = {}) => {
    const e = window.CTRL_EMPRESAS.find(x => x.id === id);
    if (!e) return null;
    const { large } = opts;
    return React.createElement('span', {
      key: id, className: 'font-mono',
      style: {
        fontSize: large ? 10.5 : 9.5, fontWeight: 600,
        padding: large ? '2px 6px' : '1px 5px', borderRadius: 3,
        background: `color-mix(in oklch, ${e.color} 14%, transparent)`,
        color: e.color,
        border: `1px solid color-mix(in oklch, ${e.color} 30%, transparent)`,
        letterSpacing: '0.04em',
      }
    }, e.short);
  };

  const fseEstadoBadge = (estado) => {
    const conf = window.CTRL_FSE_ESTADOS[estado];
    if (!conf) return null;
    return React.createElement('span', {
      className: 'font-mono',
      style: {
        display: 'inline-flex', alignItems: 'center', gap: 4,
        fontSize: 9.5, fontWeight: 600, padding: '2px 6px', borderRadius: 3,
        background: `color-mix(in oklch, ${conf.color} 14%, transparent)`,
        color: conf.color,
        border: `1px solid color-mix(in oklch, ${conf.color} 28%, transparent)`,
        letterSpacing: '0.04em', textTransform: 'uppercase',
      },
    }, conf.label);
  };

  const origemIcon = (o) => ({ email: '✉', pasta: '📂', manual: '✋', edi: '⇆' }[o] || '·');

  const slaColor = (sla) => ({ ok: 'var(--success)', warn: '#F59E0B', late: 'var(--danger)' }[sla] || 'var(--text-muted)');

  // Marcador (?) — Validar com Clara
  const ValidarClara = ({ children }) => {
    const [hover, setHover] = React.useState(false);
    return (
      <span style={{ position: 'relative', display: 'inline-flex' }}
        onMouseEnter={() => setHover(true)} onMouseLeave={() => setHover(false)}>
        <span style={{
          marginLeft: 4, fontSize: 10, fontWeight: 600,
          width: 14, height: 14, borderRadius: '50%',
          background: 'color-mix(in oklch, #A855F7 14%, transparent)',
          color: '#A855F7',
          border: '1px solid color-mix(in oklch, #A855F7 30%, transparent)',
          display: 'inline-grid', placeItems: 'center', cursor: 'help',
        }}>?</span>
        {hover && (
          <span style={{
            position: 'absolute', bottom: '100%', left: '50%', transform: 'translateX(-50%)',
            marginBottom: 6, padding: '8px 10px', borderRadius: 6,
            background: '#1E1B4B', color: '#fff', fontSize: 11, lineHeight: 1.45,
            width: 260, zIndex: 100, fontWeight: 400,
            boxShadow: '0 8px 24px rgba(0,0,0,0.3)',
          }}>
            <span style={{ color: '#A855F7', fontFamily: 'var(--font-mono)', fontSize: 9, letterSpacing: '0.06em', display: 'block', marginBottom: 4 }}>VALIDAR COM CLARA</span>
            {children}
          </span>
        )}
      </span>
    );
  };

  return { fmtEUR, fmtEURcompact, fmtEURexact, empresaChip, fseEstadoBadge, origemIcon, slaColor, ValidarClara };
})();
