export default (storage) => {
  if (!storage) return

  const skey = (key) => '' + key

  return {
    /**
     * 获取
     * @param {string} key key
     * @param {any} defaultValue defaultValue
     */
    get (key, defaultValue) {
      try {
        return JSON.parse(storage.getItem(skey(key))) || defaultValue
      } catch (error) {
        return defaultValue
      }
    },

    /**
     * 保存
     * @param {string} key key
     * @param {any} val 值
     */
    save (key, val) {
      if (val === undefined || val === null) return this.remove(key)
      storage.setItem(skey(key), JSON.stringify(val))
    },

    /**
     * 获取 所有key
     */
    keys () {
      return Object.keys(storage)
    },

    /**
     * 删除
     * @param {string} key key
     */
    remove (key) {
      storage.removeItem(skey(key))
    },

    /**
     * 清空
     */
    clear () {
      storage.clear()
    }
  }
}
