import mailjet from "node-mailjet";

interface MailjetConfig {
  apiKey: string;
  apiSecret: string;
}

interface SendEmailParams {
  to: string | string[];
  cc?: { name: string; email: string }[];
  templateId: number;
  variables: Record<string, string>;
}

export const sendEmail = async (
  config: MailjetConfig,
  params: SendEmailParams,
) => {
  const client = new mailjet({
    apiKey: config.apiKey,
    apiSecret: config.apiSecret,
  });

  const recipients = parseAddresses(params.to);

  const message = {
    To: recipients,
    TemplateID: params.templateId,
    TemplateLanguage: true,
    Variables: params.variables,
    Cc: params.cc
      ? params.cc.map((e) => ({ Name: e.name, Email: e.email }))
      : [],
  };

  await client
    .post("send", { version: "v3.1" })
    .request({ Messages: [message] })
    .catch((err) => {
      console.log(err);
    });
};

const parseAddresses = (addrs: string | string[]) => {
  return (Array.isArray(addrs) ? addrs : [addrs])
    .map((email) => email.trim())
    .filter((email) => email !== "")
    .map((email) => ({ Email: email, Name: "" }));
};
