import nodemailer from 'nodemailer';
import { requireEnv } from './env';

let cachedTransporter: ReturnType<typeof nodemailer.createTransport> | null = null;

function getTransporter() {
  if (!cachedTransporter) {
    cachedTransporter = nodemailer.createTransport({
      host: process.env.SMTP_HOST || 'smtp.gmail.com',
      port: parseInt(process.env.SMTP_PORT || '587'),
      secure: false, // TLS
      auth: {
        user: requireEnv('SMTP_USER'),
        pass: requireEnv('SMTP_PASS'),
      },
    });
  }
  return cachedTransporter;
}

export async function sendPasswordResetEmail(
  toEmail: string,
  userName: string,
  resetCode: string,
  tempPassword?: string
) {
  const mailOptions = {
    from: process.env.SMTP_FROM || 'DepakingBar Security <aristizabal2124@gmail.com>',
    to: toEmail,
    subject: '🍸 Restablecimiento de Contraseña — DepakingBar System',
    html: `
      <!DOCTYPE html>
      <html lang="es">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Restablecer Contraseña DepakingBar</title>
        <style>
          body {
            font-family: 'Segoe UI', Helvetica, Arial, sans-serif;
            background-color: #0B0E17;
            color: #E2E8F0;
            margin: 0;
            padding: 0;
            -webkit-text-size-adjust: 100%;
          }
          .container {
            max-width: 580px;
            margin: 30px auto;
            background: #121826;
            border-radius: 16px;
            overflow: hidden;
            border: 1px solid rgba(245, 158, 11, 0.3);
            box-shadow: 0 20px 40px rgba(0,0,0,0.8);
          }
          .header {
            background: linear-gradient(135deg, #1A202C 0%, #0F172A 100%);
            padding: 28px 24px;
            text-align: center;
            border-bottom: 2px solid #F59E0B;
          }
          .brand-logo {
            font-size: 24px;
            font-weight: 900;
            color: #FFFFFF;
            letter-spacing: -0.5px;
          }
          .brand-accent {
            color: #F59E0B;
          }
          .content {
            padding: 32px 28px;
          }
          .greeting {
            font-size: 20px;
            font-weight: 700;
            color: #FFFFFF;
            margin-bottom: 12px;
          }
          .message {
            font-size: 15px;
            line-height: 1.6;
            color: #94A3B8;
            margin-bottom: 24px;
          }
          .code-box {
            background: rgba(245, 158, 11, 0.1);
            border: 1px dashed #F59E0B;
            border-radius: 12px;
            padding: 20px;
            text-align: center;
            margin-bottom: 24px;
          }
          .code-label {
            font-size: 12px;
            text-transform: uppercase;
            letter-spacing: 1px;
            color: #F59E0B;
            font-weight: 700;
            margin-bottom: 8px;
          }
          .code-value {
            font-family: 'Courier New', Courier, monospace;
            font-size: 28px;
            font-weight: 900;
            color: #FFFFFF;
            letter-spacing: 4px;
          }
          .warning-box {
            background: rgba(244, 63, 94, 0.1);
            border-left: 4px solid #F43F5E;
            padding: 12px 16px;
            border-radius: 6px;
            font-size: 13px;
            color: #FDA4AF;
            margin-bottom: 24px;
          }
          .footer {
            background: #0B0E17;
            padding: 20px 24px;
            text-align: center;
            font-size: 12px;
            color: #64748B;
            border-top: 1px solid rgba(255,255,255,0.05);
          }
        </style>
      </head>
      <body>
        <div class="container">
          <div class="header">
            <div class="brand-logo">
              🍸 DEPAKING<span class="brand-accent">BAR</span>
            </div>
            <div style="font-size: 11px; color: #94A3B8; margin-top: 4px; text-transform: uppercase; letter-spacing: 1px;">
              Seguridad & Control de Accesos
            </div>
          </div>

          <div class="content">
            <div class="greeting">Hola, ${userName}</div>
            <div class="message">
              Hemos recibido una solicitud para restablecer tu contraseña de acceso al sistema de gestión de <strong>DepakingBar</strong>. Usa la clave o código a continuación para ingresar y cambiar tu contraseña.
            </div>

            <div class="code-box">
              <div class="code-label">${tempPassword ? 'Nueva Contraseña Temporal Generada' : 'Código de Verificación de Seguridad'}</div>
              <div class="code-value">${tempPassword || resetCode}</div>
            </div>

            <div class="warning-box">
              🔒 <strong>Nota de Seguridad:</strong> Este código expira en 60 minutos. Si no solicitaste este cambio, te recomendamos notificar inmediatamente al Administrador del establecimiento.
            </div>
          </div>

          <div class="footer">
            © 2026 DepakingBar System • Notificación Automática Generada por Servidor SMTP Google
          </div>
        </div>
      </body>
      </html>
    `,
  };

  return getTransporter().sendMail(mailOptions);
}
