import { isSupportedCountry } from 'libphonenumber-js/core';
export { getCountries } from 'libphonenumber-js/core';
/**
 * Sorts country `<select/>` options.
 * Can move some country `<select/>` options
 * to the top of the list, for example.
 * @param  {object[]} countryOptions — Country `<select/>` options.
 * @param  {string[]} [countryOptionsOrder] — Country `<select/>` options order. Example: `["US", "CA", "AU", "|", "..."]`.
 * @return {object[]}
 */

export function sortCountryOptions(options, order) {
  if (!order) {
    return options;
  }

  var optionsOnTop = [];
  var optionsOnBottom = [];
  var appendTo = optionsOnTop;

  for (var _iterator = order, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
    var _ref;

    if (_isArray) {
      if (_i >= _iterator.length) break;
      _ref = _iterator[_i++];
    } else {
      _i = _iterator.next();
      if (_i.done) break;
      _ref = _i.value;
    }

    var element = _ref;

    if (element === '|') {
      appendTo.push({
        divider: true
      });
    } else if (element === '...' || element === '…') {
      appendTo = optionsOnBottom;
    } else {
      (function () {
        var countryCode = void 0;

        if (element === '🌐') {
          countryCode = undefined;
        } else {
          countryCode = element;
        } // Find the position of the option.


        var index = options.indexOf(options.filter(function (option) {
          return option.value === countryCode;
        })[0]); // Get the option.

        var option = options[index]; // Remove the option from its default position.

        options.splice(index, 1); // Add the option on top.

        appendTo.push(option);
      })();
    }
  }

  return optionsOnTop.concat(options).concat(optionsOnBottom);
}
export function getSupportedCountryOptions(countryOptions, metadata) {
  if (countryOptions) {
    countryOptions = countryOptions.filter(function (option) {
      switch (option) {
        case '🌐':
        case '|':
        case '...':
        case '…':
          return true;

        default:
          return isCountrySupportedWithError(option, metadata);
      }
    });

    if (countryOptions.length > 0) {
      return countryOptions;
    }
  }
}
export function isCountrySupportedWithError(country, metadata) {
  if (isSupportedCountry(country, metadata)) {
    return true;
  } else {
    console.error("Country not found: ".concat(country));
    return false;
  }
}
export function getSupportedCountries(countries, metadata) {
  if (countries) {
    countries = countries.filter(function (country) {
      return isCountrySupportedWithError(country, metadata);
    });

    if (countries.length === 0) {
      countries = undefined;
    }
  }

  return countries;
}
//# sourceMappingURL=countries.js.map