import { parseBase64, toBase64 } from './base64/index';

/**
 * 封装LocalStorage，做了 JSON序列化, URI 组件编码，base-64编码 处理
 */
class SessionStorage {
    private cacheKey: any[] = []; // 缓存 key，方便清空，例如：退出登录的时候，清空相关缓存信息
    /**
     * 增加了一个数据项目。
     * @param key 数据项名
     * @param value 数据项值
     */
    setItem(key: string, value: any): void {
        if (key) {
            const base64Key = toBase64(key);
            sessionStorage.setItem(base64Key, toBase64(value));
            if (!this.cacheKey.includes(base64Key)) {
                this.cacheKey.push(base64Key);
            }
        } else {
            console.error('sessionStorage缓存key不能为空');
        }
    }
    /**
     * 移除 localStorage 项
     * @param key 移除项名
     */
    removeItem(key: string): void {
        if (key) {
            sessionStorage.removeItem(toBase64(key));
        } else {
            console.error('需要删除sessionStorage的key不能为空');
        }
    }
    /**
     * 读取 localStorage 项
     * @param key 读取项名
     */
    getItem(key: string): any {
        if (key) {
            const name = toBase64(key);
            const value = sessionStorage.getItem(name);
            return value ? parseBase64(value) : '';
        } else {
            console.error('请需要sessionStorage需要获取的key');
        }
    }
    /**
     * 清空本项目sessionStorage中所有成员
     */
    clear(): void {
        this.cacheKey.forEach((e) => this.removeItem(e));
        this.cacheKey.length = 0;
    }
}
const sessionStorageUtil = new SessionStorage();

export default sessionStorageUtil;
