import {
  SESClient,
  SendEmailCommand,
  SendRawEmailCommand,
  SendEmailCommandInput,
  SendRawEmailCommandOutput,
  SendRawEmailCommandInput,
  SendEmailCommandOutput,
} from "@aws-sdk/client-ses";

const sesClient = new SESClient({ region: process.env.AWS_REGION });

export interface SendEmailOptions {
  from?: string;
}

export async function sendEmail(
  to: string | string[],
  subject: string,
  htmlBody: string,
  options?: SendEmailOptions
): Promise<SendEmailCommandOutput> {
  const params: SendEmailCommandInput = {
    Source: options?.from || (process.env.SES_FROM_ADDRESS as string),
    Destination: { ToAddresses: Array.isArray(to) ? to : [to] },
    Message: {
      Subject: { Data: subject, Charset: "UTF-8" },
      Body: { Html: { Data: htmlBody, Charset: "UTF-8" } },
    },
  };
  const command = new SendEmailCommand(params);
  return sesClient.send(command);
}

export async function sendRawEmail(
  rawParams: SendRawEmailCommandInput
): Promise<SendRawEmailCommandOutput> {
  const command = new SendRawEmailCommand(rawParams);
  return sesClient.send(command);
}
