import pathRegexp from 'path-to-regexp';
import { parse } from 'querystring';

import pkg from '../../package-lock.json';

/* eslint no-useless-escape:0 import/prefer-default-export:0 */
const reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;

export const isUrl = path => reg.test(path);

export const getPageQuery = () => parse(window.location.href.split('?')[1]);

export const getAuthorityFromRouter = (router, pathname) => {
  const authority = router.find(
    ({ routes, path = '/', target = '_self' }) =>
      (path && target !== '_blank' && pathRegexp(path).exec(pathname)) ||
      (routes && getAuthorityFromRouter(routes, pathname)),
  );
  if (authority) return authority;
  return undefined;
};

export const getRouteAuthority = (path, routeData) => {
  let authorities;
  routeData.forEach(route => {
    if (pathRegexp(`${route.path}/(.*)`).test(`${path}/`)) {
      if (route.authority) {
        authorities = route.authority;
      }
      if (route.path === path) {
        authorities = route.authority || authorities;
      }

      if (route.routes) {
        authorities = getRouteAuthority(path, route.routes) || authorities;
      }
    }
  });
  return authorities;
};

export function isPromise(obj) {
  return (
    !!obj && //有实际含义的变量才执行方法，变量null，undefined和''空串都为false
    (typeof obj === 'object' || typeof obj === 'function') && // 初始promise 或 promise.then返回的
    typeof obj.then === 'function'
  );
}

export function getBaseName() {
  return pkg.name.toLocaleLowerCase();
}

export function findPathByLeafId(leafId, nodes, path, key) {
  if (path === undefined) {
    path = {};
  }
  var tmpPath = path;
  for (var i = 0; i < nodes.length; i++) {
    if (nodes[i] && nodes[i][key] && leafId == nodes[i][key] ) {
      tmpPath = nodes[i];
      return tmpPath
    }
    if (nodes[i] && nodes[i].routes) {
      var findResult = findPathByLeafId(
        leafId,
        nodes[i].routes,
        tmpPath,
        key,
        location
      );
      if (findResult) {
        return findResult;
      }
    }
  }
  return tmpPath;
}

export function transformURL(path) {
  const el = document.createElement("input");
  el.value = path;
  String.fromCharCode(92);
  return el.value.replace(/\\/g, "/");
}