import config from '../config/index'

export class Cache {
  constructor() {
    this.radix = 1000 // 如果该值为 1000 则是毫秒级单位，1 则是秒级单位
  }

  /**
   * 增加数据
   * @param {*} key 键值
   * @param {*} value 键名
   * @param {*} duration 有效期，0永久有效
   */
  setItem(key, value, duration) {
    let data = {
      value: value,
      expiryTime:
        !duration || isNaN(duration)
          ? 0
          : Date.parse(new Date()) + parseInt(duration, 10) * this.radix
    }

    try {
      uni.setStorageSync(`${config.storePrefix}${key}`, JSON.stringify(data))
    } catch (e) {
      // error
    }
  }
  /**
   * 查询数据
   * @param {*} key 键值
   */
  getItem(key) {
    try {
      const data = uni.getStorageSync(`${config.storePrefix}${key}`)
      if (data) {
        if (!data || data === 'null') {
          return null
        }
        let now = Date.parse(new Date())
        let obj
        try {
          obj = JSON.parse(data)
        } catch (e) {
          return null
        }

        if (obj.expiryTime === 0 || obj.expiryTime > now) {
          return obj.value
        }
        return null
      }
    } catch (e) {
      // error
    }
  }
  /**
   * 删除数据
   * @param {*} key 键值
   */
  removeItem(key) {
    try {
      uni.removeStorageSync(`${config.storePrefix}${key}`)
    } catch (e) {
      // error
    }
  }
  /**
   * 清空数据
   */
  clear() {
    try {
      uni.clearStorageSync()
    } catch (e) {
      // error
    }
  }
}
