/**
 * Utilitaires pour le remplacement des variables dans les templates d'emails
 */

export interface EmailVariables {
  nomApprenant?: string;
  prenomApprenant?: string;
  nomFormation?: string;
  nomSequence?: string;
  dateDebut?: string;
  dateFin?: string;
  datesHTML?: string; // HTML formaté de toutes les dates de la séquence
  lieu?: string;
  formateur?: string;
  lienInscription?: string;
  [key: string]: string | undefined;
}

/**
 * Remplace les variables {{variable}} dans un texte par leurs valeurs
 * @param template - Le texte contenant les variables à remplacer
 * @param variables - Un objet contenant les valeurs des variables
 * @returns Le texte avec les variables remplacées
 */
export function replaceEmailVariables(
  template: string,
  variables: EmailVariables
): string {
  // Vérifier que le template n'est pas undefined ou null
  if (!template) {
    return '';
  }
  
  let result = template;

  // Remplacer chaque variable trouvée dans le template
  Object.keys(variables).forEach((key) => {
    const value = variables[key];
    if (value !== undefined && value !== null) {
      // Remplacer toutes les occurrences de {{key}} par la valeur
      const regex = new RegExp(`\\{\\{${key}\\}\\}`, 'g');
      result = result.replace(regex, value);
    }
  });

  // Nettoyer les variables non remplacées (optionnel)
  // result = result.replace(/\{\{[^}]+\}\}/g, '');

  return result;
}

/**
 * Génère un aperçu d'email avec des données d'exemple
 * @param template - Le template d'email
 * @returns Le template avec des données d'exemple
 */
export function generateEmailPreview(template: string): string {
  const exampleVariables: EmailVariables = {
    nomApprenant: 'Dupont',
    prenomApprenant: 'Marie',
    nomFormation: 'Formation Management',
    nomSequence: 'Séquence 1 - Introduction',
    dateDebut: '15/01/2025',
    dateFin: '17/01/2025',
    lieu: 'Salle de formation A - Bâtiment principal',
    formateur: 'Jean Martin',
    lienInscription: 'https://exemple.com/inscription/abc123',
  };

  return replaceEmailVariables(template, exampleVariables);
}
