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

export async function sendSiteSmtpMail(params: {
  to?: string;
  subject: string;
  text: string;
  html: string;
  replyTo?: string;
  fromName?: string;
}) {
  const cfg = await prisma.smtpConfig.findUnique({ where: { id: "default" } }).catch(() => null);

  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 toEmail =
    params.to ??
    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 =
    params.fromName ??
    cfg?.fromName ??
    process.env.SOCIO_LEAD_EMAIL_FROM_NAME ??
    "Fluminense de Feira";

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

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

