module.exports = {
  friendlyName: 'Format phone number',

  inputs: {
    phone: {
      type: 'string',
      required: true
    },
    countryCode: {
      type: 'string',
      defaultsTo: '229'
    }
  },

  exits: {
    success: {
      outputType: 'string'
    },
    invalidNumber: {
      description: 'Numéro non valide'
    }
  },

  fn: async function ({phone, countryCode}, exits) {
    // Nettoyage: supprime tous les caractères non numériques
    const cleaned = phone.replace(/\D/g, '');

    // Déjà au format international correct
    if (phone.startsWith('+') && cleaned.length >= 12) {
      return exits.success(phone);
    }

    // Numéro béninois
    if (countryCode === '229') {
      let beninNumber = cleaned;

      // Cas où l'indicatif est déjà présent (229...)
      if (beninNumber.startsWith('229')) {
        beninNumber = beninNumber.substring(3);
      }

      // Vérification des différents formats possibles
      if (beninNumber.match(/^0?1\d{8}$/)) { // Formats: 0190909090 ou 190909090
        return exits.success(`+229${beninNumber.padStart(10, '01')}`);
      }
      else if (beninNumber.match(/^\d{8}$/)) { // Ancien format: 90909090
        return exits.success(`+22901${beninNumber}`);
      }
      else {
        return exits.invalidNumber('Format de numéro bénin invalide');
      }
    }

    // Numéro international (hors Bénin)
    if (cleaned.match(/^[1-9]\d{6,14}$/)) {
      return exits.success(`+${cleaned}`);
    }

    return exits.invalidNumber('Format de numéro international invalide');
  }
};