import { parse as urlParse } from 'url';

const WILDCARD_CHARACTER = '*';
const WILDCARD_SUBSTITUTION = Math.random()
  .toString()
  .split('.')[1];
const WILDCARD_SUBSTITUTION_PATTERN = new RegExp(`${WILDCARD_SUBSTITUTION}`, 'g');

export default function certificateUrlParse(url) {
  if (url.indexOf(WILDCARD_CHARACTER) === -1) {
    return urlParse(url);
  } else {
    const parsed = urlParse(url.replace(/\*/g, WILDCARD_SUBSTITUTION));
    parsed.hostname = _reinstateWildcards(parsed.hostname);
    parsed.host = _reinstateWildcards(parsed.host);
    parsed.href = _reinstateWildcards(parsed.href);
    parsed.port = _reinstateWildcards(parsed.port);

    return parsed;
  }
}

function _reinstateWildcards(string) {
  if (string) {
    return string.replace(WILDCARD_SUBSTITUTION_PATTERN, WILDCARD_CHARACTER);
  } else {
    return string;
  }
}
