import { google } from "googleapis";
import nodemailer from "nodemailer";

const OAuth2 = google.auth.OAuth2;

export async function sendMail({
  subject,
  toEmail,
  optText,
}: {
  subject: string;
  toEmail: string;
  optText: string;
}) {
  const oauth2Client = new OAuth2({
    clientId: process.env.MAILER_GOOGLE_CLIENT_ID,
    clientSecret: process.env.MAILER_GOOGLE_CLIENT_SECRET,
    redirectUri: "https://developers.google.com/oauthplayground",
  });

  oauth2Client.setCredentials({
    refresh_token: process.env.MAILER_GOOGLE_REFRESH_TOKEN,
  });

  const accessToken = oauth2Client.getAccessToken();

  const smtpTransport = nodemailer.createTransport({
    service: "gmail",
    auth: {
      type: "OAuth2",
      user: process.env.MAILER_GOOGLE_ADDRESS,
      clientId: process.env.MAILER_GOOGLE_CLIENT_ID,
      clientSecret: process.env.MAILER_GOOGLE_CLIENT_SECRET,
      refreshToken: process.env.MAILER_GOOGLE_REFRESH_TOKEN,
      accessToken: accessToken,
    },
  } as any);

  try {
    const response = await smtpTransport.sendMail({
      from: process.env.HAPPYFOX_GMAIL_ADDRESS,
      to: toEmail,
      subject: subject,
      html: optText,
    });
    smtpTransport.close();
    return response;
  } catch (error) {
    throw new Error(error);
  }
}
