import { ErrorCodeList } from '@/services/dataCenter/interafce/error';
import { parseBase64, toBase64 } from './base64/index';
interface StorageKeyName {
    loginData: string; // 账号登录返回信息 token等
    loginAccount: string; // 登录账号信息 用来多窗口
    bankSignDetail: string; // 银行签约信息详情
    cusBank: string; // 托管银行
    ErrorInfos: string; // 数据库错误信息
    allEnums: string; // 所有枚举信息
    errorCodeInfos: ErrorCodeList[];
    theme: string; // 主题色
    rowNumber: string; // 数据库错误信息 时间戳
}

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

export default localStorageUtil;
