import nodemailer from 'nodemailer';

function createTransport() {
  const host = process.env.SMTP_HOST?.trim();
  if (!host) return null;
  const user = process.env.SMTP_USER?.trim();
  return nodemailer.createTransport({
    host,
    port: Number(process.env.SMTP_PORT || 587),
    secure: process.env.SMTP_SECURE === 'true',
    auth: user ? { user, pass: process.env.SMTP_PASS ?? '' } : undefined,
  });
}

export function isSmtpConfigured(): boolean {
  return Boolean(process.env.SMTP_HOST?.trim() && process.env.SMTP_FROM?.trim());
}

export async function sendSmtpMail(opts: {
  to: string;
  subject: string;
  text: string;
  replyTo?: string;
  headers?: Record<string, string>;
}): Promise<{ ok: boolean; error?: string }> {
  const transport = createTransport();
  const from = process.env.SMTP_FROM?.trim();
  if (!transport || !from) {
    return { ok: false, error: 'SMTP_HOST and SMTP_FROM must be set on the API' };
  }
  try {
    await transport.sendMail({
      from,
      to: opts.to,
      subject: opts.subject,
      text: opts.text,
      replyTo: opts.replyTo,
      headers: opts.headers,
    });
    return { ok: true };
  } catch (e) {
    return { ok: false, error: String(e) };
  }
}
