import nodemailer from "nodemailer";
import { emailConfig } from "../config/email.ts";
export type EmailInput = {
  to: string;
  subject: string;
  html: string;
  replyTo?: string;
  attachment?: Uint8Array;
  messageId?: string;
};
export function isEmailConfigured() {
  return Boolean(
    process.env.SMTP_HOST &&
      process.env.SMTP_USER &&
      process.env.SMTP_PASSWORD &&
      process.env.EMAIL_FROM,
  );
}
export async function sendConfiguredEmail(input: EmailInput) {
  if (!isEmailConfigured()) throw new Error("email_not_configured");
  const port = Number(process.env.SMTP_PORT || 465);
  const transport = nodemailer.createTransport({
    host: process.env.SMTP_HOST,
    port,
    secure: process.env.SMTP_SECURE
      ? process.env.SMTP_SECURE === "true"
      : port === 465,
    requireTLS: process.env.SMTP_REQUIRE_TLS !== "false",
    auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASSWORD },
    connectionTimeout: 10000,
    greetingTimeout: 10000,
    socketTimeout: 30000,
  });
  try {
    return await transport.sendMail({
      from: process.env.EMAIL_FROM,
      to: input.to,
      subject: input.subject,
      html: input.html,
      replyTo: input.replyTo,
      messageId: input.messageId,
      attachments: input.attachment
        ? [
            {
              filename: emailConfig.attachmentName,
              content: Buffer.from(input.attachment),
              contentType: "application/pdf",
            },
          ]
        : undefined,
    });
  } finally {
    transport.close();
  }
}
