/**
 * Service d'envoi d'emails avec Nodemailer
 */
import nodemailer from 'nodemailer';
import dotenv from 'dotenv';

dotenv.config();

// Configuration du transporteur email
const createTransporter = () => {
  // Pour le développement, utilisez un service de test comme Ethereal
  // Pour la production, utilisez un vrai service SMTP (Gmail, SendGrid, etc.)

  if (process.env.NODE_ENV === 'development' && !process.env.SMTP_HOST) {
    // Mode développement sans configuration SMTP
    console.log('⚠️  Mode développement: Les emails seront affichés dans la console');
    return null;
  }

  return nodemailer.createTransport({
    host: process.env.SMTP_HOST,
    port: parseInt(process.env.SMTP_PORT) || 587,
    secure: process.env.SMTP_PORT === '465', // true pour le port 465, false pour les autres
    auth: {
      user: process.env.SMTP_USER,
      pass: process.env.SMTP_PASS,
    },
    tls: {
      rejectUnauthorized: false // Ignore les erreurs de certificat SSL
    }
  });
};

const transporter = createTransporter();

/**
 * Fonction générique pour envoyer un email
 */
const sendEmail = async ({ to, subject, html, text }) => {
  try {
    // En mode dev sans SMTP, afficher l'email dans la console
    if (!transporter) {
      console.log('📧 Email qui aurait été envoyé:');
      console.log('To:', to);
      console.log('Subject:', subject);
      console.log('Content:', text || html);
      return { success: true, mode: 'dev' };
    }

    const mailOptions = {
      from: process.env.EMAIL_FROM || 'noreply@thetiptop.fr',
      to,
      subject,
      text,
      html,
    };

    const info = await transporter.sendMail(mailOptions);
    console.log('✅ Email envoyé:', info.messageId);
    return { success: true, messageId: info.messageId };
  } catch (error) {
    console.error('❌ Erreur envoi email:', error);
    throw new Error('Erreur lors de l\'envoi de l\'email');
  }
};

/**
 * Envoie un email de vérification
 */
export const sendVerificationEmail = async (email, token) => {
  const verificationUrl = `${process.env.FRONTEND_URL || 'http://localhost:3000'}/verify-email?token=${token}`;

  const html = `
    <!DOCTYPE html>
    <html>
    <head>
      <style>
        body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
        .container { max-width: 600px; margin: 0 auto; padding: 20px; }
        .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; text-align: center; border-radius: 10px 10px 0 0; }
        .content { background: #f9f9f9; padding: 30px; border-radius: 0 0 10px 10px; }
        .button { display: inline-block; padding: 12px 30px; background: #667eea; color: white; text-decoration: none; border-radius: 5px; margin: 20px 0; }
        .footer { text-align: center; margin-top: 20px; color: #666; font-size: 12px; }
      </style>
    </head>
    <body>
      <div class="container">
        <div class="header">
          <h1>🍵 Bienvenue chez Thé Tip Top!</h1>
        </div>
        <div class="content">
          <h2>Vérification de votre adresse email</h2>
          <p>Merci de vous être inscrit au jeu-concours Thé Tip Top!</p>
          <p>Pour activer votre compte et participer au jeu, veuillez vérifier votre adresse email en cliquant sur le bouton ci-dessous:</p>
          <div style="text-align: center;">
            <a href="${verificationUrl}" class="button">Vérifier mon email</a>
          </div>
          <p>Ou copiez ce lien dans votre navigateur:</p>
          <p style="word-break: break-all; color: #667eea;">${verificationUrl}</p>
          <p style="margin-top: 30px; color: #666; font-size: 14px;">
            Si vous n'avez pas créé de compte, vous pouvez ignorer cet email.
          </p>
        </div>
        <div class="footer">
          <p>© 2025 Thé Tip Top - Tous droits réservés</p>
        </div>
      </div>
    </body>
    </html>
  `;

  const text = `
    Bienvenue chez Thé Tip Top!

    Pour vérifier votre adresse email, cliquez sur le lien suivant:
    ${verificationUrl}

    Si vous n'avez pas créé de compte, vous pouvez ignorer cet email.
  `;

  return sendEmail({
    to: email,
    subject: '🍵 Vérification de votre email - Thé Tip Top',
    html,
    text,
  });
};

/**
 * Envoie un email de réinitialisation de mot de passe
 */
export const sendResetPasswordEmail = async (email, token) => {
  const resetUrl = `${process.env.FRONTEND_URL || 'http://localhost:3000'}/reset-password?token=${token}`;

  const html = `
    <!DOCTYPE html>
    <html>
    <head>
      <style>
        body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
        .container { max-width: 600px; margin: 0 auto; padding: 20px; }
        .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; text-align: center; border-radius: 10px 10px 0 0; }
        .content { background: #f9f9f9; padding: 30px; border-radius: 0 0 10px 10px; }
        .button { display: inline-block; padding: 12px 30px; background: #dc3545; color: white; text-decoration: none; border-radius: 5px; margin: 20px 0; }
        .footer { text-align: center; margin-top: 20px; color: #666; font-size: 12px; }
      </style>
    </head>
    <body>
      <div class="container">
        <div class="header">
          <h1>🔐 Réinitialisation de mot de passe</h1>
        </div>
        <div class="content">
          <h2>Demande de réinitialisation</h2>
          <p>Vous avez demandé à réinitialiser votre mot de passe.</p>
          <p>Cliquez sur le bouton ci-dessous pour choisir un nouveau mot de passe:</p>
          <div style="text-align: center;">
            <a href="${resetUrl}" class="button">Réinitialiser mon mot de passe</a>
          </div>
          <p>Ou copiez ce lien dans votre navigateur:</p>
          <p style="word-break: break-all; color: #dc3545;">${resetUrl}</p>
          <p style="margin-top: 30px; color: #666; font-size: 14px;">
            Ce lien expire dans 1 heure.<br>
            Si vous n'avez pas demandé cette réinitialisation, ignorez cet email.
          </p>
        </div>
        <div class="footer">
          <p>© 2025 Thé Tip Top - Tous droits réservés</p>
        </div>
      </div>
    </body>
    </html>
  `;

  const text = `
    Réinitialisation de mot de passe

    Vous avez demandé à réinitialiser votre mot de passe.

    Cliquez sur le lien suivant pour choisir un nouveau mot de passe:
    ${resetUrl}

    Ce lien expire dans 1 heure.
    Si vous n'avez pas demandé cette réinitialisation, ignorez cet email.
  `;

  return sendEmail({
    to: email,
    subject: '🔐 Réinitialisation de votre mot de passe - Thé Tip Top',
    html,
    text,
  });
};

/**
 * Envoie un email de confirmation de gain
 */
export const sendPrizeWinEmail = async (email, prizeName, firstName) => {
  const html = `
    <!DOCTYPE html>
    <html>
    <head>
      <style>
        body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
        .container { max-width: 600px; margin: 0 auto; padding: 20px; }
        .header { background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%); color: white; padding: 30px; text-align: center; border-radius: 10px 10px 0 0; }
        .content { background: #f9f9f9; padding: 30px; border-radius: 0 0 10px 10px; }
        .prize-box { background: white; border: 2px solid #FFD700; border-radius: 10px; padding: 20px; margin: 20px 0; text-align: center; }
        .footer { text-align: center; margin-top: 20px; color: #666; font-size: 12px; }
      </style>
    </head>
    <body>
      <div class="container">
        <div class="header">
          <h1>🎉 Félicitations ${firstName}!</h1>
        </div>
        <div class="content">
          <h2>Vous avez gagné!</h2>
          <div class="prize-box">
            <h3 style="color: #FFA500; font-size: 24px;">🏆 ${prizeName}</h3>
          </div>
          <p>Rendez-vous en magasin avec votre code de ticket pour récupérer votre lot.</p>
          <p>Un employé validera votre ticket et vous remettra votre gain.</p>
          <p style="margin-top: 30px; color: #666; font-size: 14px;">
            Merci de participer au jeu-concours Thé Tip Top!
          </p>
        </div>
        <div class="footer">
          <p>© 2025 Thé Tip Top - Tous droits réservés</p>
        </div>
      </div>
    </body>
    </html>
  `;

  const text = `
    Félicitations ${firstName}!

    Vous avez gagné: ${prizeName}

    Rendez-vous en magasin avec votre code de ticket pour récupérer votre lot.

    Merci de participer au jeu-concours Thé Tip Top!
  `;

  return sendEmail({
    to: email,
    subject: '🎉 Félicitations! Vous avez gagné - Thé Tip Top',
    html,
    text,
  });
};

/**
 * Envoie un email depuis le formulaire de contact
 */
export const sendContactEmail = async ({ fullName, email, subject, message }) => {
  const html = `
    <!DOCTYPE html>
    <html>
    <head>
      <style>
        body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
        .container { max-width: 600px; margin: 0 auto; padding: 20px; }
        .header { background: linear-gradient(135deg, #d4a574 0%, #c4956a 100%); color: white; padding: 30px; text-align: center; border-radius: 10px 10px 0 0; }
        .content { background: #f9f9f9; padding: 30px; border-radius: 0 0 10px 10px; }
        .info-box { background: white; border-left: 4px solid #d4a574; padding: 15px; margin: 15px 0; }
        .footer { text-align: center; margin-top: 20px; color: #666; font-size: 12px; }
      </style>
    </head>
    <body>
      <div class="container">
        <div class="header">
          <h1>📬 Nouveau message de contact</h1>
        </div>
        <div class="content">
          <h2>Formulaire de contact</h2>

          <div class="info-box">
            <strong>De:</strong> ${fullName}<br>
            <strong>Email:</strong> ${email}<br>
            <strong>Sujet:</strong> ${subject}
          </div>

          <div class="info-box">
            <strong>Message:</strong><br>
            <p style="white-space: pre-wrap;">${message}</p>
          </div>

          <p style="margin-top: 30px; color: #666; font-size: 14px;">
            Pour répondre à ce message, envoyez un email à: <a href="mailto:${email}">${email}</a>
          </p>
        </div>
        <div class="footer">
          <p>© 2025 Thé Tip Top - Formulaire de contact</p>
        </div>
      </div>
    </body>
    </html>
  `;

  const text = `
    Nouveau message de contact

    De: ${fullName}
    Email: ${email}
    Sujet: ${subject}

    Message:
    ${message}

    Pour répondre, envoyez un email à: ${email}
  `;

  return sendEmail({
    to: process.env.EMAIL_FROM || 'thetiptopgr3@gmail.com',
    subject: `[Contact] ${subject}`,
    html,
    text,
  });
};

export default {
  sendVerificationEmail,
  sendResetPasswordEmail,
  sendPrizeWinEmail,
  sendContactEmail,
};
