const nodemailer = require('nodemailer');

let transporter;

function boolFromEnv(value, fallback) {
  if (value === undefined || value === null || value === '') return fallback;
  return ['1', 'true', 'yes'].includes(String(value).toLowerCase());
}

function isConfigured() {
  return Boolean(process.env.SMTP_HOST && process.env.SMTP_USER);
}

function escapeHtml(value) {
  return String(value || '')
    .replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#039;');
}

function getSenderAddress() {
  return process.env.MAIL_FROM || process.env.SMTP_USER;
}

function getTransporter() {
  if (!isConfigured()) return null;

  if (!transporter) {
    const port = Number(process.env.SMTP_PORT || 587);

    transporter = nodemailer.createTransport({
      host: process.env.SMTP_HOST,
      port,
      secure: boolFromEnv(process.env.SMTP_SECURE, port === 465),
      auth: {
        user: process.env.SMTP_USER,
        pass: process.env.SMTP_PASSWORD || ''
      }
    });
  }

  return transporter;
}

async function sendConfirmationEmail({ to, name, confirmUrl }) {
  const mailTransporter = getTransporter();
  const safeName = escapeHtml(name || to);
  const safeConfirmUrl = escapeHtml(confirmUrl);

  if (process.env.NODE_ENV !== 'production') {
    console.info(`Email confirmation link for ${to}: ${confirmUrl}`);
  }

  if (!mailTransporter) {
    console.warn(`SMTP is not configured. Email confirmation link for ${to}: ${confirmUrl}`);
    return { sent: false, reason: 'SMTP_NOT_CONFIGURED' };
  }

  const result = await mailTransporter.sendMail({
    from: getSenderAddress(),
    to,
    subject: 'Xác nhận tài khoản Robot Installer',
    text: [
      `Xin chào ${name || to},`,
      '',
      'Bạn vừa đăng ký tài khoản hoặc cập nhật email Robot Installer.',
      `Bấm link sau để xác nhận email và kích hoạt tài khoản: ${confirmUrl}`,
      '',
      'Nếu bạn không thực hiện đăng ký này, hãy bỏ qua email.'
    ].join('\n'),
    html: `
      <div style="font-family: Arial, sans-serif; color: #172033; line-height: 1.5;">
        <h2 style="margin: 0 0 12px;">Xác nhận tài khoản Robot Installer</h2>
        <p>Xin chào ${safeName},</p>
        <p>Bạn vừa đăng ký tài khoản hoặc cập nhật email Robot Installer. Bấm nút bên dưới để xác nhận email và kích hoạt tài khoản.</p>
        <p>
          <a href="${safeConfirmUrl}" style="background: #3755c3; border-radius: 8px; color: #ffffff; display: inline-block; font-weight: 700; padding: 10px 14px; text-decoration: none;">
            Xác nhận email
          </a>
        </p>
        <p style="color: #566166; font-size: 13px;">Nếu nút không mở được, copy link này vào trình duyệt:<br>${safeConfirmUrl}</p>
      </div>
    `
  });

  console.info('Confirmation email sent:', {
    to,
    messageId: result.messageId,
    accepted: result.accepted,
    rejected: result.rejected
  });

  return { sent: true };
}

module.exports = {
  sendConfirmationEmail
};
