/**
 *
 * @param {*} phoneString au format E.164
 * @param {*} toFormat L=Country code, X=Number Format="L X XX XX XX XX"
 * @returns
 */
export function formatPhoneNumber(phoneString, toFormat = 'L X XX XX XX XX') {
  if (!phoneString) return;
  // Vérifier si le numéro est au format international
  if (!validateE164PhoneNumber(phoneString)) {
    return phoneString;
  }
  const matches = phoneString.match(/^\+(\d{1,3})(\d{9})$/);
  if (!matches) return phoneString;

  const [_, countryCode, number] = matches;
  const prefix = `+${countryCode}`;
  const digits = number;

  // Initialiser le numéro formaté avec le préfixe
  let formattedNumber = toFormat.replace('L', prefix);

  let digitIndex = 0;

  // Remplacer les X par les chiffres
  formattedNumber = formattedNumber.replace(/X/g, (match, offset) => {
    // Si c'est le dernier groupe de X, mettre tous les chiffres restants
    if (offset === formattedNumber.lastIndexOf('X') - match.length + 1) {
      const remainingDigits = digits.substring(digitIndex);
      digitIndex += remainingDigits.length;
      return remainingDigits;
    }
    // Sinon, mettre un seul chiffre
    return digits[digitIndex++] || '';
  });

  return formattedNumber;
}

// Fonction pour valider un numéro de téléphone au format E.164
// Le format E.164 est un format international pour les numéros de téléphone
// qui commence par un signe '+' suivi du code pays et du numéro de téléphone
// Par exemple : +33123456789 pour un numéro français
export function validateE164PhoneNumber(phoneNumber) {
  const regEx = /^\+[1-9]\d{9,14}$/;
  return regEx.test(phoneNumber);
}
