import Exception from '../../exception';

declare const unescape: any;

/**
 * 数组去重
 */
export function unique(arr: any[]): any[]  {
  const temp = [];
  const length = arr.length;
  let i;
  for (i = 0; i < length; i++) {
    if (temp.indexOf(arr[i]) === -1) {
      temp.push(arr[i]);
    }
  }
  return temp;
}

/**
 * 读取cookie
 */
export function getCookie(name: string): string {
  //正则匹配
  const reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)');
  const arr = document.cookie.match(reg);
  if (arr.length) {
    return decodeURIComponent(arr[2]);
  } else {
    return undefined;
  }
}

/**
 * hex解码
 */
export function hexToString(str: string): string {
  let tmp = '';
  for (let i = 0; i < str.length; i += 2) {
    tmp += '\\' + str.substring(i, i + 2);
  }
  str = unescape(tmp.replace(/\\/g, '%'));
  let out;
  let i;
  let len;
  let c;
  let char2;
  let char3;
  out = '';
  len = str.length;
  i = 0;
  while (i < len) {
    c = str.charCodeAt(i++);
    switch (c >> 4) {
      case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
        out += str.charAt(i - 1);
        break;
      case 12: case 13:
        char2 = str.charCodeAt(i++);
        out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
        break;
      case 14:
        char2 = str.charCodeAt(i++);
        char3 = str.charCodeAt(i++);
        out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0));
        break;
      default:
        break;
    }
  }
  return out;
}

/**
 * hex编码
 */
export function stringToHex(str: string): string {
  const arr = [];
  for (let i = 0; i < str.length; i++) {
  　arr[i] = (str.charCodeAt(i).toString(16)).slice(-4);
  }
  return arr.join('');
}