import constant from './constant'

// 存储变量名前缀
let storageKey = constant.storageKey;

const storage = {
    init: function(key) {
        if (key === storageKey) {
            return false;
        }
        if (typeof key === 'string') {
            return key;
        } else if (typeof key === 'object') {
            return key['prefix'];
        }
    },
    set: function(key, value, params = null) {
        var _key = this.init(key);
        // console.log('比较两个KEY', key, _key)
        if (!_key) {
            return;
        }
        let tmp = uni.getStorageSync(storageKey)
        tmp = tmp ? tmp : {}
        if (_key === key) {
            tmp[key] = value;
        } else {
            tmp[_key] = tmp[_key] || {};
            if (params === null || params === 'undefined') {
                //不加params参数，则将该项原有数据全部抹除后写入新value作为对象唯一的一个值
                //只有在明确设置了为null 或者 undifined才是
                //注意：已知问题：参数（object的键名）不允许是负数
                tmp[_key] = {
                    0: value
                };
            } else {
                //添加参数，则为指定覆盖方式，对其他项不产生影响
                tmp[_key][params] = value;
            }
        }

        uni.setStorageSync(storageKey, tmp)
    },
    get: function(key, params = null) {
        var _key = this.init(key);
        if (!_key) {
            return false;
        }
        let tmp = uni.getStorageSync(storageKey)
        tmp = tmp ? tmp : {}
        if (_key === key) {
            return tmp[key] || "";
        } else {
            return (tmp[_key] ? (tmp[_key][params] || "") : "");
        }
    },
    all: function(key) {
        //获取指定键的全部缓存
        var _key = this.init(key);
        if (!_key) {
            return false;
        }
        let tmp = uni.getStorageSync(storageKey)
        tmp = tmp ? tmp : {}
        if (_key === key) {
            return tmp[key] || "";
        } else {
            return tmp[_key] || [];
        }
    },
    remove: function(key, params = null) {
        var _key = this.init(key);
        if (!_key) {
            return;
        }
        let tmp = uni.getStorageSync(storageKey)
        tmp = tmp ? tmp : {}
        if (_key === key) {
            delete tmp[key];
        } else {
            delete tmp[_key][params];
        }
        uni.setStorageSync(storageKey, tmp)
    },
    clean: function() {
        uni.removeStorageSync(storageKey)
    },
    info: function() {
        //返回当前缓存情况 https://uniapp.dcloud.net.cn/api/storage/storage.html#getstorageinfo
        //currentSize 当前占用空间 kb;  keys，所有缓存键key
        return uni.getStorageInfoSync(); //只能获取全部，无法指定key
    }
}

export default storage