import axios from 'axios';
import { mailVerificationToken } from './auth';
import { Info } from './types';

const userMail = process.env.SMTP_FROM_ADDRESS!;

export async function generateMail(to: string, subject: string, html: string) {
  return axios.post(`${process.env.NOTIFICATION_SERVICE_URL!}/send-email`, {
    passkey: process.env.NOTIFICATION_SERVICE_PASSKEY!,
    from: userMail,
    subject,
    to,
    html,
    /* This is for when we upgrade the notification service to v2 */
    // service: 'RMS_SERVICE',
    // toExpire: true,
  });
}

export const sendVerificationMail = async (payload: Info) => {
  const mailToken = mailVerificationToken(payload);
  const { email, firstName } = payload as { email: string; firstName: string };
  const verifyUrl = process.env.FRONTEND_URL
    ? `${process.env.FRONTEND_URL}/verify-email?token=${mailToken}`
    : `http://localhost:${process.env.PORT}/api/v1/auth/verify-email?token=${mailToken}`;
  const html = `
      <div style="max-width: 700px; margin:auto; border: 10px solid #ddd; padding: 50px 20px; font-size: 110%;">
             <h2 style="text-align: center; text-transform: uppercase;color: teal;">Welcome to RMS APP </h2>
              <p>Welcome ${firstName}, You're almost set to start using RMS APP.
                  Just click the button below to validate your email address.
              </p>
               <a href="${verifyUrl}" style="background: crimson; text-decoration: none; color: white; padding: 10px 20px; margin: 10px 0; display: inline-block;">Click here</a>
              </div>
          `;
  await generateMail(email, 'Email Verification Link', html);
};

export const sendPasswordResetMail = async (payload: Info) => {
  const mailToken = mailVerificationToken(payload);
  const { email, firstName } = payload as { email: string; firstName: string };
  const verifyUrl = process.env.FRONTEND_URL
    ? `${process.env.FRONTEND_URL}/reset-password?token=${mailToken}`
    : `http://localhost:${process.env.PORT}/api/v1/auth/reset-password?token=${mailToken}`;
  const html = `
      <div style="max-width: 700px; margin:auto; border: 10px solid #ddd; padding: 50px 20px; font-size: 110%;">
             <h2 style="text-align: center; text-transform: uppercase;color: teal;">RMS APP PASSWORD RESET </h2>
              <p>Hi ${firstName},
                  Kindly click the button below to reset your password.
              </p>
               <a href="${verifyUrl}" style="background: crimson; text-decoration: none; color: white; padding: 10px 20px; margin: 10px 0; display: inline-block;">Click here</a>
              </div>
          `;
  await generateMail(email, 'Password Reset', html);
};

export const sendPasswordResetCode = async (payload: Info, code: number) => {
  const { email, firstName } = payload as { email: string; firstName: string };
  const html = `
          <div style="max-width: 700px; margin:auto; border: 10px solid #ddd; padding: 50px 20px; font-size: 110%;">
             <h2 style="text-align: center; text-transform: uppercase;color: teal;">RMS MOBILE APP PASSWORD RESET </h2>
              <p>Hi ${firstName},<br><br>
                  Your password reset code is <span style="font-size:18px;">${code}</span>
              </p>
          </div>
          `;
  await generateMail(email, 'Password Reset', html);
};

export const sendCredentialsMail = async (payload: Info, password: string) => {
  const { email, firstName } = payload as { email: string; firstName: string };
  const html = `
          <div style="max-width: 700px; margin:auto; border: 10px solid #ddd; padding: 50px 20px; font-size: 110%;">
             <h2 style="text-align: center; text-transform: uppercase;color: teal;">WELCOME TO RMS</h2>
              <p>Hi ${firstName},<br><br>
              Welcome to RMS <br>
                  Your password is <strong><span style="font-size:18px;">${password}</span></strong>
              </p>
          </div>
          `;
  await generateMail(email, 'Your Login Credentials', html);
};
