// ========================
// SERVICE D'ENVOI D'EMAIL
// ========================

import emailjs from '@emailjs/browser';

// Configuration EmailJS depuis les variables d'environnement
const EMAILJS_CONFIG = {
  SERVICE_ID: import.meta.env.VITE_EMAILJS_SERVICE_ID || 'YOUR_SERVICE_ID',
  TEMPLATE_ID: import.meta.env.VITE_EMAILJS_TEMPLATE_ID || 'YOUR_TEMPLATE_ID',
  PUBLIC_KEY: import.meta.env.VITE_EMAILJS_PUBLIC_KEY || 'YOUR_PUBLIC_KEY'
};

// Interface pour les données du formulaire
export interface ContactFormData {
  name: string;
  email: string;
  subject: string;
  message: string;
}

// Interface pour la réponse
export interface EmailResponse {
  success: boolean;
  message: string;
}

// Fonction pour envoyer l'email
export const sendContactEmail = async (formData: ContactFormData): Promise<EmailResponse> => {
  try {
    // Validation des données
    if (!formData.name || !formData.email || !formData.subject || !formData.message) {
      return {
        success: false,
        message: 'Tous les champs sont requis.'
      };
    }

    // Validation de l'email
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if (!emailRegex.test(formData.email)) {
      return {
        success: false,
        message: 'Veuillez entrer une adresse email valide.'
      };
    }

    // Vérification de la configuration EmailJS
    if (!validateEmailJSConfig()) {
      console.warn('Configuration EmailJS non trouvée, utilisation du fallback mailto');
      // Fallback vers mailto
      const mailtoLink = createMailtoLink(formData);
      window.location.href = mailtoLink;
      return {
        success: true,
        message: 'Ouverture de votre client email par défaut...'
      };
    }

    console.log('Envoi avec EmailJS...');
    console.log('Service ID:', EMAILJS_CONFIG.SERVICE_ID);
    console.log('Template ID:', EMAILJS_CONFIG.TEMPLATE_ID);

    // Préparation des paramètres pour EmailJS
    const templateParams = {
      from_name: formData.name,
      from_email: formData.email,
      subject: formData.subject,
      message: formData.message,
      to_name: 'Dayron Van Leemput', // Votre nom
      reply_to: formData.email
    };

    // Envoi avec EmailJS
    const response = await emailjs.send(
      EMAILJS_CONFIG.SERVICE_ID,
      EMAILJS_CONFIG.TEMPLATE_ID,
      templateParams,
      EMAILJS_CONFIG.PUBLIC_KEY
    );

    if (response.status === 200) {
      return {
        success: true,
        message: 'Message envoyé avec succès ! Je vous répondrai bientôt.'
      };
    } else {
      throw new Error('Erreur lors de l\'envoi');
    }

  } catch (error) {
    console.error('Erreur lors de l\'envoi de l\'email:', error);
    
    return {
      success: false,
      message: 'Une erreur s\'est produite lors de l\'envoi. Veuillez réessayer ou me contacter directement.'
    };
  }
};

// Fonction alternative pour fallback (formulaire mailto)
export const createMailtoLink = (formData: ContactFormData): string => {
  const subject = encodeURIComponent(`[Portfolio] ${formData.subject}`);
  const body = encodeURIComponent(
    `Bonjour Dayron,\n\n` +
    `${formData.message}\n\n` +
    `Cordialement,\n${formData.name}\n` +
    `Email: ${formData.email}`
  );
  
  return `mailto:dayron.vanleemput@example.com?subject=${subject}&body=${body}`;
};

// Fonction pour valider les credentials EmailJS
export const validateEmailJSConfig = (): boolean => {
  return (
    EMAILJS_CONFIG.SERVICE_ID !== 'YOUR_SERVICE_ID' &&
    EMAILJS_CONFIG.TEMPLATE_ID !== 'YOUR_TEMPLATE_ID' &&
    EMAILJS_CONFIG.PUBLIC_KEY !== 'YOUR_PUBLIC_KEY'
  );
};