import nodemailer from 'nodemailer';
import dotenv from 'dotenv';
dotenv.config();

/**
 * Configure the transporter using environment variables.
 * If SMTP_USER is missing, it will create a mock Ethereal test account.
 */
export const sendEmail = async (to: string, subject: string, html: string) => {
  try {
    let transporter;

    if (process.env.SMTP_USER && process.env.SMTP_PASS) {
      // Real SMTP Configuration
      const isGmail = process.env.SMTP_USER.includes('gmail.com');
      
      transporter = nodemailer.createTransport({
        service: isGmail ? 'gmail' : undefined,
        host: isGmail ? undefined : (process.env.SMTP_HOST || 'smtp.gmail.com'),
        port: Number(process.env.SMTP_PORT) || 587,
        secure: process.env.SMTP_SECURE === 'true', // true for 465, false for 587
        connectionTimeout: 10000,
        greetingTimeout: 10000,
        socketTimeout: 15000,
        auth: {
          user: process.env.SMTP_USER,
          pass: process.env.SMTP_PASS, // Use App Password for Gmail
        },
      });
    } else if (process.env.EMAIL_USE_ETHEREAL === 'true') {
      const testAccount = await nodemailer.createTestAccount();
      transporter = nodemailer.createTransport({
        host: 'smtp.ethereal.email',
        port: 587,
        secure: false,
        connectionTimeout: 10000,
        greetingTimeout: 10000,
        socketTimeout: 15000,
        auth: {
          user: testAccount.user,
          pass: testAccount.pass,
        },
      });
    } else {
      console.log(`Email skipped for ${to}: SMTP_USER/SMTP_PASS are not configured.`);
      return false;
    }

    const info = await transporter.sendMail({
      from: `"AHRI Meeting Rooms" <${process.env.SMTP_USER || 'noreply@ahri.gov.et'}>`,
      to,
      subject,
      html,
    });
    
    console.log('Message sent: %s', info.messageId);
    
    // Log preview URL if using Ethereal
    if (!process.env.SMTP_USER && process.env.EMAIL_USE_ETHEREAL === 'true') {
      console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
    }
    return true;
  } catch (error) {
    console.error('Email send failed:', error);
    return false;
  }
};
