import { baseTemplate, heading, primaryButton, infoBox, BRAND_COLORS as C } from './base.js';

export interface WeeklyUpdateData {
  nombre: string;
  empresa: string;
  periodoLabel: string; // ej: "Abril 2026"
  kpis: {
    ingresos: number;
    egresos: number;
    utilidad: number;
    margen: number;          // porcentaje
    ivaBalance: number;      // positivo = a pagar, negativo = a favor
    ivaAFavorAcumulado: number;
    cfdisEmitidos: number;
    cfdisRecibidos: number;
  };
  alertas: Array<{
    titulo: string;
    mensaje: string;
    prioridad: 'alta' | 'media' | 'baja';
  }>;
  discrepanciasPorMes: Array<{ label: string; count: number }>;
  fechaGeneracion: string;
}

function fmtMoney(n: number): string {
  return `$${n.toLocaleString('es-MX', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
}

function kpiBox(label: string, value: string, sublabel?: string, color?: string): string {
  const borderColor = color || C.border;
  const valueColor = color || C.textPrimary;
  return `<td style="padding:0;width:50%;vertical-align:top;">
    <div style="background-color:${C.bgLight};border:1px solid ${borderColor};border-radius:8px;padding:14px 16px;margin:4px;">
      <p style="margin:0;color:${C.textMuted};font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.04em;">${label}</p>
      <p style="margin:6px 0 0;color:${valueColor};font-size:20px;font-weight:700;">${value}</p>
      ${sublabel ? `<p style="margin:2px 0 0;color:${C.textMuted};font-size:11px;">${sublabel}</p>` : ''}
    </div>
  </td>`;
}

const PRIORIDAD_COLOR: Record<string, { bg: string; border: string; text: string }> = {
  alta: { bg: '#fef2f2', border: '#ef4444', text: '#991b1b' },
  media: { bg: '#fffbeb', border: '#f59e0b', text: '#92400e' },
  baja: { bg: '#eff6ff', border: '#3b82f6', text: '#1e40af' },
};

export function weeklyUpdateEmail(data: WeeklyUpdateData): string {
  const { kpis } = data;
  const ivaLabel = kpis.ivaBalance >= 0 ? 'IVA a pagar' : 'IVA a favor';
  const ivaValor = Math.abs(kpis.ivaBalance);
  const ivaColor = kpis.ivaBalance >= 0 ? '#dc2626' : C.accent;
  const utilidadColor = kpis.utilidad >= 0 ? C.accent : '#dc2626';

  const alertasHtml = data.alertas.length === 0
    ? `<div style="background-color:#ecfdf5;border-left:4px solid ${C.accent};border-radius:8px;padding:14px 18px;margin:0 0 24px;">
        <p style="margin:0;color:#166534;font-size:14px;">✓ No hay alertas activas esta semana. Tu operación está en orden.</p>
      </div>`
    : data.alertas.map(a => {
        const colors = PRIORIDAD_COLOR[a.prioridad] || PRIORIDAD_COLOR.baja;
        return `<div style="background-color:${colors.bg};border-left:4px solid ${colors.border};border-radius:8px;padding:12px 16px;margin:0 0 10px;">
          <p style="margin:0 0 4px;color:${colors.text};font-size:14px;font-weight:600;">${a.titulo}</p>
          <p style="margin:0;color:${colors.text};font-size:13px;">${a.mensaje}</p>
        </div>`;
      }).join('');

  const discrepanciasHtml = data.discrepanciasPorMes.length === 0
    ? `<p style="margin:0;color:${C.textMuted};font-size:13px;text-align:center;padding:16px;">Sin discrepancias en los últimos meses. ✓</p>`
    : `<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse;">
        <thead>
          <tr>
            <th align="left" style="padding:8px 12px;background-color:${C.bgLight};color:${C.textMuted};font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.04em;border-bottom:1px solid ${C.border};">Mes</th>
            <th align="right" style="padding:8px 12px;background-color:${C.bgLight};color:${C.textMuted};font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.04em;border-bottom:1px solid ${C.border};">Facturas con discrepancia</th>
          </tr>
        </thead>
        <tbody>
          ${data.discrepanciasPorMes.map(d => `<tr>
            <td style="padding:10px 12px;border-bottom:1px solid ${C.border};color:${C.textPrimary};font-size:14px;">${d.label}</td>
            <td align="right" style="padding:10px 12px;border-bottom:1px solid ${C.border};color:${d.count > 0 ? '#dc2626' : C.textPrimary};font-size:14px;font-weight:600;">${d.count}</td>
          </tr>`).join('')}
        </tbody>
      </table>`;

  return baseTemplate(`
    ${heading('Actualización semanal')}
    <p style="color:${C.textPrimary};margin:0 0 8px;">Hola <strong>${data.nombre}</strong>,</p>
    <p style="color:${C.textPrimary};margin:0 0 24px;">Aquí tienes el resumen de tu actividad fiscal en <strong>${data.empresa}</strong> correspondiente al periodo <strong>${data.periodoLabel}</strong>.</p>

    <h3 style="font-family:'Inter', sans-serif;font-weight:600;color:${C.textPrimary};margin:0 0 12px;font-size:16px;">Indicadores del periodo</h3>
    <table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="margin:0 -4px 24px;border-collapse:separate;">
      <tr>
        ${kpiBox('Ingresos', fmtMoney(kpis.ingresos), `${kpis.cfdisEmitidos} CFDIs emitidos`)}
        ${kpiBox('Egresos', fmtMoney(kpis.egresos), `${kpis.cfdisRecibidos} CFDIs recibidos`)}
      </tr>
      <tr>
        ${kpiBox('Utilidad', fmtMoney(kpis.utilidad), `Margen ${kpis.margen.toFixed(1)}%`, utilidadColor)}
        ${kpiBox(ivaLabel, fmtMoney(ivaValor), undefined, ivaColor)}
      </tr>
    </table>

    ${kpis.ivaAFavorAcumulado > 0 ? infoBox(`
      <p style="margin:0;color:${C.textMuted};font-size:13px;">IVA a favor acumulado del año</p>
      <p style="margin:4px 0 0;color:${C.accent};font-size:18px;font-weight:700;">${fmtMoney(kpis.ivaAFavorAcumulado)}</p>
    `) : ''}

    <h3 style="font-family:'Inter', sans-serif;font-weight:600;color:${C.textPrimary};margin:24px 0 12px;font-size:16px;">Alertas activas</h3>
    ${alertasHtml}

    <h3 style="font-family:'Inter', sans-serif;font-weight:600;color:${C.textPrimary};margin:24px 0 12px;font-size:16px;">Discrepancias de régimen por mes</h3>
    <p style="color:${C.textMuted};margin:0 0 12px;font-size:13px;">Facturas recibidas donde el régimen fiscal del receptor (tu RFC) no coincide con tus regímenes activos. Cada discrepancia podría representar una factura mal emitida que el SAT podría rechazar.</p>
    ${discrepanciasHtml}

    <div style="margin:32px 0 16px;text-align:center;">
      ${primaryButton('Ver dashboard completo', 'https://horuxfin.com/dashboard')}
    </div>

    <p style="color:${C.textMuted};margin:24px 0 0;font-size:12px;text-align:center;">
      Reporte generado el ${data.fechaGeneracion}.<br>
      Recibes este correo porque eres dueño o CFO de ${data.empresa} en Horux 360.
    </p>
  `);
}
