import isViablePhoneNumber from './isViablePhoneNumber.js';

// https://www.ietf.org/rfc/rfc3966.txt

/**
 * @param  {string} text - Phone URI (RFC 3966).
 * @return {object} `{ ?number, ?ext }`.
 */
export function parseRFC3966(text) {
  let number;
  let ext;

  // Replace "tel:" with "tel=" for parsing convenience.
  text = text.replace(/^tel:/, 'tel=');
  for (const part of text.split(';')) {
    const [name, value] = part.split('=');
    switch (name) {
      case 'tel':
        number = value;
        break;
      case 'ext':
        ext = value;
        break;
      case 'phone-context':
        // Only "country contexts" are supported.
        // "Domain contexts" are ignored.
        if (value[0] === '+') {
          number = value + number;
        }
        break;
    }
  }

  // If the phone number is not viable, then abort.
  if (!isViablePhoneNumber(number)) {
    return {};
  }
  const result = {
    number
  };
  if (ext) {
    result.ext = ext;
  }
  return result;
}

/**
 * @param  {object} - `{ ?number, ?extension }`.
 * @return {string} Phone URI (RFC 3966).
 */
export function formatRFC3966({
  number,
  ext
}) {
  if (!number) {
    return '';
  }
  if (number[0] !== '+') {
    throw new Error(`"formatRFC3966()" expects "number" to be in E.164 format.`);
  }
  return `tel:${number}${ext ? ';ext=' + ext : ''}`;
}
//# sourceMappingURL=RFC3966.js.map