import type { RenewalLetterRow } from "../reports/renewal-letter"; const GENERATION_TEXT: Record = { 1: "Le enviamos el primer aviso para renovar su póliza.", 2: "Le enviamos el segundo aviso para renovar su póliza.", 3: "Le informamos que su póliza está vencida.", }; function escapeHtml(value: unknown): string { return String(value ?? "") .replaceAll("&", "&") .replaceAll("<", "<") .replaceAll(">", ">") .replaceAll('"', """) .replaceAll("'", "'"); } function displayDate(value: string): string { if (value === "—") return value; const [year, month, day] = value.split("-"); return `${day}/${month}/${year}`; } function money(value: string | null, currency: string): string { if (!value) return "No disponible"; return new Intl.NumberFormat("es-MX", { style: "currency", currency, minimumFractionDigits: 2, }).format(Number(value)); } function row(label: string, value: string): string { return `${escapeHtml(label)}${escapeHtml(value)}`; } export function renderRenewalEmail(letter: RenewalLetterRow): { subject: string; html: string; } { const expired = letter.generation === 3; const subject = expired ? `Póliza vencida: ${letter.policyNumber}` : `Aviso de renovación: póliza ${letter.policyNumber}`; const phone = letter.customerMobile ?? letter.customerPhone ?? "No disponible"; const address = letter.customerAddress.join(", ") || "No disponible"; const premium = letter.total ?? letter.netPremium; const details = [ row("Número de póliza", letter.policyNumber), row("Tipo de póliza", letter.policyType), row("Aseguradora", letter.provider), row("Fecha de vencimiento", displayDate(letter.policyTo)), row("Prima", money(premium, letter.currency)), row("Cliente", letter.customerName), row("Correo", letter.customerEmail ?? "No disponible"), row("Teléfono", phone), row("Dirección", address), ].join(""); return { subject, html: `

Estimado(a) ${escapeHtml(letter.customerName)}:

${escapeHtml(GENERATION_TEXT[letter.generation] ?? "Le enviamos un aviso sobre la renovación de su póliza.")}

${details}

Por favor, comuníquese con Jorge Cuadros & Asociados para revisar su renovación.

Atentamente,
Jorge Cuadros & Asociados

`, }; }