export interface MessageTemplate {
  message: string;
  sender?: string;
}

export interface MessageConfig {
  inTwoDays: MessageTemplate;
  passedOneDay: MessageTemplate;
  passedBetweenTwoAndSixDays: MessageTemplate;
  passedSevenDays: MessageTemplate;
  passedMoreThanSevenDays: MessageTemplate;
}

export const MESSAGE_CONFIG: MessageConfig = {
  inTwoDays: {
    message:
      "Bonjour {{patientName}},\nVotre injection est prévue dans deux jours.\n\nPensez à retirer votre traitement{{medication}} à la pharmacie. Le produit se conserve au réfrigérateur.\n \nCe traitement est essentiel pour préserver votre vision et éviter une évolution défavorable de la maladie.\n \nVous pouvez compter à chaque étape sur votre équipe médicale pour vous accompagner, vous rassurer et répondre à vos questions.",
    sender: 'AD+',
  },
  passedOneDay: {
    message:
      "Bonjour {{patientName}},\nNous espérons que votre injection d'hier s'est bien passée.\nPouvez-vous confirmer que vous avez pu vous y rendre ?\n\nIl vous suffit de cliquer ici : {{formLink}}\n\nMerci pour votre réponse, elle nous aide à mieux suivre votre traitement.\nL'équipe AD+",
    sender: 'AD+',
  },
  passedBetweenTwoAndSixDays: {
    message:
      'Bonjour, votre injection IVT était prévue il y a quelques jours. Il est important de prendre votre rendez-vous rapidement. AD+',
    sender: 'AD+',
  },
  passedSevenDays: {
    message:
      'Bonjour, votre injection IVT était prévue il y a une semaine. Il est urgent de prendre votre rendez-vous. AD+',
    sender: 'AD+',
  },
  passedMoreThanSevenDays: {
    message:
      "Bonjour {{patientName}},\nUne nouvelle date d'injection IVT n'a pas été renseignée. Il est primordial de renseigner cette information pour assurer votre suivi médical. Veuillez renseigner une date via ce lien : {{formLink}}\nNous vous remercions de votre collaboration.\nL'équipe AD+",
    sender: 'AD+',
  },
};

// Fonction pour personnaliser le message avec des variables
export function personalizeMessage(
  template: string,
  variables: MessageVariables,
): string {
  let personalizedMessage = template;

  // Remplacer les variables définies
  Object.entries(variables).forEach(([key, value]) => {
    if (value !== undefined) {
      // Pour medication, ajouter un espace avant si défini
      if (key === 'medication' && value) {
        personalizedMessage = personalizedMessage.replace(
          new RegExp(`{{${key}}}`, 'g'),
          ` ${value}`,
        );
      } else {
        personalizedMessage = personalizedMessage.replace(
          new RegExp(`{{${key}}}`, 'g'),
          value,
        );
      }
    }
  });

  // Supprimer les variables non définies ({{variableName}}) en les remplaçant par une chaîne vide
  personalizedMessage = personalizedMessage.replace(
    /\{\{[^}]+\}\}/g,
    '',
  );

  // Nettoyer les espaces multiples
  personalizedMessage = personalizedMessage.replace(/  +/g, ' ');

  // Nettoyer les lignes vides multiples (plus de 2 sauts de ligne consécutifs)
  personalizedMessage = personalizedMessage.replace(/\n{3,}/g, '\n\n');

  // Supprimer les sauts de ligne en début et fin
  personalizedMessage = personalizedMessage.trim();

  return personalizedMessage;
}

// Variables disponibles pour la personnalisation
export interface MessageVariables {
  patientName?: string;
  injectionDate?: string;
  centerName?: string;
  phoneNumber?: string;
  medication?: string;
  formLink?: string;
}
