export default class UrlUtils {
  static getQueryParams(queryString) {
    const params = new Map();
    const re = /[?&]?([^=]+)=([^&]*)/g;
    let tokens;
    //Necessário por causa da tela Histórico Padrão que possui resourceID com acento
    queryString = window.unescape(queryString);
    queryString = queryString.split("+").join(" ");
    while ((tokens = re.exec(queryString))) {
      params.set(window.decodeURIComponent(tokens[1]), tokens[2]);
    }
    //Inserimos a urlBase no params.
    params.set("urlBase", this.getUrlBase());
    if (window["moduleID"] && window["URIServiceBroker"]) {
      params.set("moduleID", window["moduleID"]);
      params.set("URIServiceBroker", window["URIServiceBroker"]);
    }
    return params;
  }
  static getUrlBase() {
    if (window['mock_url'])
      return window['mock_url'];
    return `${location.protocol}//${location.hostname}${location.port ? ":" + location.port : ""}`;
  }
  /**
  *  Extrai da URL o parâmetro que contém o resourceId da tela desejada.
  *
  */
  static getResourceIdFromUrlToken(url) {
    try {
      const parts = url.split('/');
      if (!parts[1]) {
        return null;
      }
      const encodedValue = parts[1];
      return atob(encodedValue);
    }
    catch (error) {
      throw new Error('Erro ao obter resourceId:' + error);
    }
  }
  /**
   *  Extrai da URL o parâmetro que contém o o objeto com a PK do registro específico.
   *
   */
  static getPkObjectFromUrlToken(url) {
    try {
      let pkObjectPart = url.split('/')[2];
      if (!pkObjectPart)
        return null;
      if (pkObjectPart.indexOf('&') > -1) {
        return JSON.parse(atob(pkObjectPart.split('&')[0]));
      }
      return JSON.parse(atob(pkObjectPart));
    }
    catch (error) {
      throw new Error('Erro ao obter a PK do objeto:' + error);
    }
  }
}
