import { history } from '~/redux/store';
import { API_RETRY_INTERVAL } from '~/constants/api';

export const getPath = (): string => (window.location && window.location.pathname);
export const pushPath = (url: string): string => history.push(url);
export const replacePath = (url: string): string => history.replace(url);

export const getUrlData = (url = getPath()) => {
  const [, path, mode] = url.split('/');
  const { host, hash, protocol } = window.location;

  return {
    path, mode, host, hash, protocol,
  };
};

// Parses query string
export const parseQuery = (queryString: string) => {
  let params = {};
  const queries = decodeURIComponent(queryString)
    .substring(queryString.substr(0, 1) === '?' ? 1 : 0)
    .split('&');
  for (let i = 0, l = queries.length; i < l; i += 1) {
    const temp = queries[i].split('=');
    params = { ...params, [temp[0]]: temp[1] };
  }
  return params;
};

export const pushLoaderState = (state: number) => {
  document.getElementById('loader-bar')!.style.width = `${state}%`;
};

export const countDownToRefresh = (left: number = API_RETRY_INTERVAL): void => {
  if (left <= 0) return document.location.reload();

  document.getElementById('loader-bar')!.style.width = `${(left / API_RETRY_INTERVAL) * 100}%`;
  setTimeout(() => countDownToRefresh(left - 0.25), 1000);
};

export const pushNetworkInitError = () => {
  document.getElementById('loader-bar')!.classList.add('is_failed');
  document.getElementById('loader-bar')!.style.width = '100%';
  document.getElementById('loader-error')!.style.opacity = String(1);

  countDownToRefresh();
};

export const copyToClipboard = str => {
  const el = document.createElement('textarea');
  el.value = str;
  el.setAttribute('readonly', '');
  el.style.position = 'absolute';
  el.style.left = '-9999px';
  document.body.appendChild(el);
  el.select();
  document.execCommand('copy');
  document.body.removeChild(el);
};
