import nodemailer from 'nodemailer'

// Email configuration - reads from environment variables
const SMTP_HOST = process.env.SMTP_HOST || ''
const SMTP_PORT = parseInt(process.env.SMTP_PORT || '587')
const SMTP_USER = process.env.SMTP_USER || ''
const SMTP_PASS = process.env.SMTP_PASS || ''
const SMTP_FROM = process.env.SMTP_FROM || 'Totes Ltda. <no-reply@totes.com.bo>'
const APP_URL = process.env.NEXT_PUBLIC_APP_URL || 'http://sac.totes.com.bo'

// Check if email is configured
function isEmailConfigured(): boolean {
  return !!(SMTP_HOST && SMTP_USER && SMTP_PASS)
}

// Create transporter (lazy initialization)
let transporter: nodemailer.Transporter | null = null

function getTransporter(): nodemailer.Transporter {
  if (!transporter) {
    transporter = nodemailer.createTransport({
      host: SMTP_HOST,
      port: SMTP_PORT,
      secure: SMTP_PORT === 465,
      auth: {
        user: SMTP_USER,
        pass: SMTP_PASS,
      },
    })
  }
  return transporter
}

export interface SendUserCreatedEmailParams {
  to: string
  name: string
  password: string
  role: string
}

const ROLE_LABELS: Record<string, string> = {
  CUSTOMER: 'Cliente',
  SUPERVISOR: 'Supervisor',
  MANAGER: 'Gerencia',
  ADMIN: 'Administrador',
}

export async function sendUserCreatedEmail({ to, name, password, role }: SendUserCreatedEmailParams): Promise<{ sent: boolean; error?: string }> {
  if (!isEmailConfigured()) {
    console.log('📧 Email not configured. Skipping welcome email for:', to)
    return { sent: false, error: 'Email not configured' }
  }

  try {
    const roleLabel = ROLE_LABELS[role] || role
    
    const html = `
      <!DOCTYPE html>
      <html>
      <head>
        <meta charset="utf-8">
        <style>
          body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f5f5f5; margin: 0; padding: 20px; }
          .container { max-width: 600px; margin: 0 auto; background: white; border-radius: 12px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
          .header { background: linear-gradient(135deg, #FF9B2E, #FFB347); padding: 30px 40px; text-align: center; }
          .header h1 { color: white; margin: 0; font-size: 24px; font-weight: 700; }
          .header p { color: rgba(255,255,255,0.9); margin: 8px 0 0; font-size: 14px; }
          .content { padding: 30px 40px; }
          .greeting { font-size: 16px; color: #333; margin-bottom: 20px; }
          .info-box { background: #F8FAFF; border: 1px solid #E9EEFF; border-radius: 8px; padding: 20px; margin: 20px 0; }
          .info-row { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #EEF2F5; }
          .info-row:last-child { border-bottom: none; }
          .info-label { color: #6A7A8C; font-size: 14px; }
          .info-value { color: #2D5BFF; font-weight: 600; font-size: 14px; }
          .btn { display: inline-block; background: linear-gradient(135deg, #FF9B2E, #FFB347); color: white; padding: 12px 30px; border-radius: 8px; text-decoration: none; font-weight: 600; font-size: 16px; margin: 20px 0; }
          .footer { background: #0D1B2E; padding: 20px 40px; text-align: center; color: rgba(255,255,255,0.7); font-size: 12px; }
          .warning { background: #FFF8F0; border: 1px solid #FFD699; border-radius: 8px; padding: 12px 16px; margin: 16px 0; font-size: 13px; color: #8B6914; }
        </style>
      </head>
      <body>
        <div class="container">
          <div class="header">
            <h1>🏗️ Totes Ltda.</h1>
            <p>Sistema de Atención al Cliente</p>
          </div>
          <div class="content">
            <p class="greeting">Hola <strong>${name}</strong>,</p>
            <p>Se ha creado una cuenta para usted en el Sistema de Atención al Cliente de <strong>Totes Ltda.</strong> con el rol de <strong>${roleLabel}</strong>.</p>
            
            <div class="info-box">
              <div class="info-row">
                <span class="info-label">Correo electrónico:</span>
                <span class="info-value">${to}</span>
              </div>
              <div class="info-row">
                <span class="info-label">Contraseña temporal:</span>
                <span class="info-value">${password}</span>
              </div>
              <div class="info-row">
                <span class="info-label">Rol asignado:</span>
                <span class="info-value">${roleLabel}</span>
              </div>
            </div>

            <div class="warning">
              ⚠️ Por seguridad, le recomendamos cambiar su contraseña después de iniciar sesión por primera vez.
            </div>

            <div style="text-align: center;">
              <a href="${APP_URL}" class="btn">Ingresar al Sistema</a>
            </div>

            <p style="color: #6A7A8C; font-size: 13px; margin-top: 20px;">
              Si tiene alguna consulta, contacte a su supervisor o al área de soporte de Totes Ltda.
            </p>
          </div>
          <div class="footer">
            <p>© ${new Date().getFullYear()} Totes Ltda. — Todos los derechos reservados</p>
            <p>Este correo fue enviado automáticamente. No responda a este mensaje.</p>
          </div>
        </div>
      </body>
      </html>
    `

    const text = `
Totes Ltda. - Sistema de Atención al Cliente

Hola ${name},

Se ha creado una cuenta para usted con los siguientes datos:

Correo: ${to}
Contraseña temporal: ${password}
Rol: ${roleLabel}

Ingrese al sistema en: ${APP_URL}

Por seguridad, cambie su contraseña después de iniciar sesión.

---
Totes Ltda. — Sistema de Atención al Cliente
    `.trim()

    await getTransporter().sendMail({
      from: SMTP_FROM,
      to,
      subject: 'Totes Ltda. — Tu cuenta ha sido creada',
      html,
      text,
    })

    console.log('📧 Welcome email sent to:', to)
    return { sent: true }
  } catch (error: any) {
    console.error('📧 Error sending welcome email:', error.message)
    return { sent: false, error: error.message }
  }
}

export interface SendReviewResponseEmailParams {
  to: string
  customerName: string
  reviewCode: string
  reviewTitle: string
  supervisorName: string
  responseToClient: string
}

export async function sendReviewResponseEmail({
  to,
  customerName,
  reviewCode,
  reviewTitle,
  supervisorName,
  responseToClient,
}: SendReviewResponseEmailParams): Promise<{ sent: boolean; error?: string }> {
  if (!isEmailConfigured()) {
    console.log('📧 Email not configured. Skipping review response email for:', to)
    return { sent: false, error: 'Email not configured' }
  }

  try {
    const html = `
      <!DOCTYPE html>
      <html>
      <head>
        <meta charset="utf-8">
        <style>
          body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f5f5f5; margin: 0; padding: 20px; }
          .container { max-width: 600px; margin: 0 auto; background: white; border-radius: 12px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
          .header { background: linear-gradient(135deg, #FF9B2E, #FFB347); padding: 30px 40px; text-align: center; }
          .header h1 { color: white; margin: 0; font-size: 24px; font-weight: 700; }
          .header p { color: rgba(255,255,255,0.9); margin: 8px 0 0; font-size: 14px; }
          .content { padding: 30px 40px; }
          .greeting { font-size: 16px; color: #333; margin-bottom: 20px; }
          .review-info { background: #F8FAFF; border: 1px solid #E9EEFF; border-radius: 8px; padding: 16px; margin: 20px 0; }
          .review-code { color: #2D5BFF; font-weight: 600; font-size: 13px; }
          .review-title { color: #333; font-weight: 600; font-size: 15px; margin-top: 4px; }
          .response-box { background: #FFF8F0; border-left: 4px solid #FF9B2E; border-radius: 4px; padding: 16px; margin: 20px 0; }
          .response-label { color: #6A7A8C; font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 8px; }
          .response-text { color: #333; font-size: 14px; line-height: 1.6; }
          .supervisor-info { color: #6A7A8C; font-size: 13px; margin-top: 12px; }
          .btn { display: inline-block; background: linear-gradient(135deg, #FF9B2E, #FFB347); color: white; padding: 12px 30px; border-radius: 8px; text-decoration: none; font-weight: 600; font-size: 16px; margin: 20px 0; }
          .footer { background: #0D1B2E; padding: 20px 40px; text-align: center; color: rgba(255,255,255,0.7); font-size: 12px; }
        </style>
      </head>
      <body>
        <div class="container">
          <div class="header">
            <h1>🏗️ Totes Ltda.</h1>
            <p>Respuesta a tu reseña</p>
          </div>
          <div class="content">
            <p class="greeting">Hola <strong>${customerName}</strong>,</p>
            <p>Tu reseña ha recibido una respuesta del equipo de Totes Ltda.</p>

            <div class="review-info">
              <div class="review-code">Reseña ${reviewCode}</div>
              <div class="review-title">${reviewTitle}</div>
            </div>

            <div class="response-box">
              <div class="response-label">Respuesta del supervisor</div>
              <div class="response-text">${responseToClient}</div>
              <div class="supervisor-info">— ${supervisorName}, Supervisor Totes Ltda.</div>
            </div>

            <p>Puedes ver los detalles completos de tu reseña y la respuesta en el sistema.</p>

            <div style="text-align: center;">
              <a href="${APP_URL}" class="btn">Ver mi reseña</a>
            </div>

            <p style="color: #6A7A8C; font-size: 13px; margin-top: 20px;">
              Si tienes alguna consulta adicional, no dudes en contactarnos.
            </p>
          </div>
          <div class="footer">
            <p>© ${new Date().getFullYear()} Totes Ltda. — Todos los derechos reservados</p>
            <p>Este correo fue enviado automáticamente. No responda a este mensaje.</p>
          </div>
        </div>
      </body>
      </html>
    `

    const text = `
Totes Ltda. - Respuesta a tu reseña

Hola ${customerName},

Tu reseña ${reviewCode} "${reviewTitle}" ha recibido una respuesta:

${responseToClient}

— ${supervisorName}, Supervisor Totes Ltda.

Puedes ver los detalles en: ${APP_URL}

---
Totes Ltda. — Sistema de Atención al Cliente
    `.trim()

    await getTransporter().sendMail({
      from: SMTP_FROM,
      to,
      subject: `Totes Ltda. — Respuesta a tu reseña ${reviewCode}`,
      html,
      text,
    })

    console.log('📧 Review response email sent to:', to, 'for review:', reviewCode)
    return { sent: true }
  } catch (error: any) {
    console.error('📧 Error sending review response email:', error.message)
    return { sent: false, error: error.message }
  }
}
