export default {
  /** ****************** 数据转换工具 ********************/
  /**
   * @desc json转string
   * @param  {*} value 值
   * @return {*} value 值
   */
  _json2string(value) {
    return JSON.stringify(value);
  },

  /**
   * @desc string转json
   * @param  {*} value 值
   * @return {*} value 值
   */
  _string2json(value) {
    try {
      return JSON.parse(value);
    } catch (e) {
      //   以后再说
    }
  },

  /**
   * @desc 对象解除关联（深拷贝）
   * @param {*} obj
   */
  convertObj(obj) {
    return JSON.parse(JSON.stringify(obj));
  },

  /** ****************** Cookie操作 ********************/
  /**
   * @desc 获取cookie
   * @param {String} name 名称
   * @return {*} 值
   */
  getCookie(name) {
    let rs = '';
    const nameStr = `${name}=`;
    const ca = document.cookie.split(';');
    for (let i = 0; i < ca.length; i++) {
      let c = ca[i];
      while (c.charAt(0) === ' ') {
        c = c.substring(1);
      }
      if (c.indexOf(nameStr) !== -1) {
        rs = this._string2json(c.substring(nameStr.length, c.length));
      }
    }
    return rs;
  },

  /**
   * @desc 设置cookie
   * @param {String} name 名称
   * @param {*} value 值
   * @param {Number} hours 过期时间（小时）
   */
  setCookie(name, value, hours) {
    let str = `${name}=${this._json2string(value)}`;
    if (hours && hours > 0) {
      const date = new Date();
      date.setTime(date.getTime() + hours * 3600 * 1000);
      str += `; expires=${date.toUTCString()}`;
    }
    document.cookie = str;
  },

  /**
   * @desc 删除cookie
   * @param {String} name 名称
   * @param {Object} options 选项
   * @param {Boolean} options.usePath 是否指定路径
   */
  delCookie(name, options = {}) {
    const date = new Date();
    date.setTime(date.getTime() - 10000);
    let cookieStr = `${name}=a; expires=${date.toGMTString()}`;

    if (options.usePath) {
      cookieStr += ';path=/micro;';
    }

    document.cookie = cookieStr;
  },

  /**
   * @desc 删除cookie（带路径）
   * @param {String} name 名称
   */
  clearCookie(name) {
    this.delCookie(name, { usePath: true });
  },

  /** ****************** 本地存储操作 ********************/
  /**
   * @desc 获取localStorage中指定的变量
   * @param {String} name 名称
   * @return {*} 值
   */
  getStorage(name) {
    return this._string2json(window.localStorage[name]);
  },

  /**
   * @desc 设置localStorage中指定的变量
   * @param {String} name 名称
   * @param {*} value 值
   */
  setStorage(name, value) {
    window.localStorage[name] = this._json2string(value);
  },

  /**
   * @desc 删除localStorage中指定的变量
   * @param {String} name 名称
   */
  delStorage(name) {
    window.localStorage.removeItem(name);
  },

  /**
   * @desc 获取sessionStorage中指定的变量
   * @param {String} name 名称
   * @return {*} 值
   */
  getSessionStorage(name) {
    return this._string2json(window.sessionStorage.getItem(name));
  },

  /**
   * @desc 设置sessionStorage中指定的变量
   * @param {String} name 名称
   * @param {*} value 值
   */
  setSessionStorage(name, value) {
    window.sessionStorage.setItem(name, this._json2string(value));
  },

  /**
   * @desc 删除sessionStorage中指定的变量
   * @param {String} name 名称
   */
  delSessionStorage(name) {
    window.sessionStorage.removeItem(name);
  },

  /** ****************** URL工具 ********************/
  /**
   * @desc 获取URL中的参数
   * @param {String} name 参数名
   * @return {String} 参数值
   */
  getParameter(name) {
    const reg = new RegExp(`${name}=.*`, 'g');
    const str = window.location.href.match(reg);
    if (str) {
      return str[0].split('&')[0].split('=')[1];
    } else {
      return '';
    }
  }
};
