import nodemailer from "nodemailer";
import { prisma } from "@/lib/prisma";

type SocioLeadEmailData = {
  name: string;
  dateOfBirth: Date;
  email: string;
  phone: string;
  address: string;
  addressNumber: string;
  neighborhood: string;
  city: string;
  uf: string;
  planName: string;
  message?: string | null;
};

function escapeHtml(value: string) {
  return value
    .replaceAll("&", "&amp;")
    .replaceAll("<", "&lt;")
    .replaceAll(">", "&gt;")
    .replaceAll('"', "&quot;")
    .replaceAll("'", "&#039;");
}

function formatDob(d: Date) {
  // pt-BR para manter o formato esperado no Brasil.
  return d.toLocaleDateString("pt-BR");
}

export async function sendSocioLeadEmail(data: SocioLeadEmailData) {
  const cfg = await prisma.smtpConfig.findUnique({ where: { id: "default" } }).catch(() => null);

  // Prioridade: configuração salva no banco -> variáveis de ambiente -> defaults.
  // Aceita tanto chaves SMTP quanto variações comuns (EMAIL_HOST etc.) para facilitar reaproveitar config.
  const smtpHost = cfg?.smtpHost ?? process.env.SMTP_HOST ?? process.env.EMAIL_HOST;
  const smtpPortRaw =
    cfg?.smtpPort ?? (process.env.SMTP_PORT ? Number(process.env.SMTP_PORT) : process.env.EMAIL_PORT ? Number(process.env.EMAIL_PORT) : undefined);
  const smtpUser = cfg?.smtpUser ?? process.env.SMTP_USER ?? process.env.EMAIL_USER;
  const smtpPass = cfg?.smtpPass ?? process.env.SMTP_PASS ?? process.env.EMAIL_PASS;
  const smtpSecureRaw = cfg?.smtpSecure ?? process.env.SMTP_SECURE ?? process.env.EMAIL_SECURE;

  const emailTo = cfg?.toEmail ?? process.env.SOCIO_LEAD_EMAIL_TO ?? "torcedor@fluminensedefeira.com.br";
  const emailFrom = cfg?.fromEmail ?? process.env.SOCIO_LEAD_EMAIL_FROM ?? "torcedor@fluminensedefeira.com.br";
  const emailFromName = cfg?.fromName ?? process.env.SOCIO_LEAD_EMAIL_FROM_NAME ?? "Fluminense de Feira - Sócio Torcedor";

  if (!smtpHost || smtpPortRaw === undefined || smtpPortRaw === null || Number.isNaN(Number(smtpPortRaw))) {
    throw new Error("SMTP não configurado (SMTP_HOST/SMTP_PORT ausentes).");
  }

  const smtpPort = Number(smtpPortRaw);
  const smtpSecure =
    typeof smtpSecureRaw === "boolean" ? smtpSecureRaw : smtpSecureRaw === "true" || smtpSecureRaw === "1";

  const transporter = nodemailer.createTransport({
    host: smtpHost,
    port: smtpPort,
    secure: smtpSecure,
    auth: smtpUser && smtpPass ? { user: smtpUser, pass: smtpPass } : undefined,
  });

  const subject = `Novo cadastro Sócio Torcedor - ${data.planName}`;
  const text = [
    "Novo cadastro Sócio Torcedor",
    `Plano: ${data.planName}`,
    `Nome: ${data.name}`,
    `Nascimento: ${formatDob(data.dateOfBirth)}`,
    `E-mail: ${data.email}`,
    `Telefone: ${data.phone}`,
    `Endereço: ${data.address}, ${data.addressNumber}`,
    `Bairro: ${data.neighborhood}`,
    `Cidade: ${data.city} - ${data.uf}`,
    data.message ? `Mensagem: ${data.message}` : null,
  ]
    .filter(Boolean)
    .join("\n");

  const html = `
    <div style="font-family: Arial, Helvetica, sans-serif; color: #111;">
      <h2 style="margin: 0 0 12px 0;">Novo cadastro Sócio Torcedor</h2>
      <p style="margin: 0 0 8px 0;"><b>Plano:</b> ${escapeHtml(data.planName)}</p>
      <p style="margin: 0 0 8px 0;"><b>Nome:</b> ${escapeHtml(data.name)}</p>
      <p style="margin: 0 0 8px 0;"><b>Nascimento:</b> ${escapeHtml(formatDob(data.dateOfBirth))}</p>
      <p style="margin: 0 0 8px 0;"><b>E-mail:</b> ${escapeHtml(data.email)}</p>
      <p style="margin: 0 0 8px 0;"><b>Telefone:</b> ${escapeHtml(data.phone)}</p>
      <p style="margin: 0 0 8px 0;"><b>Endereço:</b> ${escapeHtml(data.address)}, ${escapeHtml(data.addressNumber)}</p>
      <p style="margin: 0 0 8px 0;"><b>Bairro:</b> ${escapeHtml(data.neighborhood)}</p>
      <p style="margin: 0 0 8px 0;"><b>Cidade:</b> ${escapeHtml(data.city)} - ${escapeHtml(data.uf)}</p>
      ${
        data.message
          ? `<p style="margin: 12px 0 0 0;"><b>Mensagem:</b> ${escapeHtml(data.message)}</p>`
          : `<p style="margin: 12px 0 0 0; color: #555;">Mensagem não informada.</p>`
      }
      <hr style="border: none; border-top: 1px solid #eee; margin: 16px 0;" />
      <p style="margin: 0; color: #666; font-size: 12px;">Enviado pelo site fluminensedefeira.com.br</p>
    </div>
  `;

  await transporter.sendMail({
    from: `"${emailFromName}" <${emailFrom}>`,
    to: emailTo,
    replyTo: data.email,
    subject,
    text,
    html,
  });
}

