import Cookies from 'js-cookie';

/**
 * @description window.localStorage 浏览器永久缓存
 * @method set 设置永久缓存
 * @method get 获取永久缓存
 * @method remove 移除永久缓存
 * @method clear 移除全部永久缓存
 */
export const Local = {
	// 防止部署多套系统到同一域名不同目录时，变量共用的问题（`__HOTLINE_NAME__`为 `package.json` 中的 `name`）
	setKey(key: string) {
		return `${import.meta.env.VITE_STORAGE_NAME}_${key}`;
	},
	// 设置永久缓存
	set<T>(key: string, val: T) {
		window.localStorage.setItem(Local.setKey(key), JSON.stringify(val));
	},
	// 获取永久缓存
	get(key: string) {
		let json = <string>window.localStorage.getItem(Local.setKey(key));
		return JSON.parse(json);
	},
	// 移除永久缓存
	remove(key: string) {
		window.localStorage.removeItem(Local.setKey(key));
	},
	// 移除全部永久缓存
	clear() {
		window.localStorage.clear();
	},
};

/**
 * @description window.sessionStorage 浏览器临时缓存
 * @method set 设置临时缓存
 * @method get 获取临时缓存
 * @method remove 移除临时缓存
 * @method clear 移除全部临时缓存
 */
export const Session = {
	// 设置临时缓存
	set<T>(key: string, val: T) {
		window.sessionStorage.setItem(Local.setKey(key), JSON.stringify(val));
	},
	// 获取临时缓存
	get(key: string) {
		let json = <string>window.sessionStorage.getItem(Local.setKey(key));
		return JSON.parse(json);
	},
	// 移除临时缓存
	remove(key: string) {
		window.sessionStorage.removeItem(Local.setKey(key));
	},
	// 移除全部临时缓存
	clear() {
		window.sessionStorage.clear();
	},
};

/**
 * @description Cookies 浏览器临时缓存
 * @method set 设置Cookies
 * @method get 获取Cookies
 * @method remove 移除Cookies
 * @method clear 移除Cookies
 */
export const Cookie = {
	// 设置临时缓存
	set<T>(key: string, val: T) {
		Cookies.set(Local.setKey(key), val);
	},
	// 获取临时缓存
	get(key: string) {
		return Cookies.get(Local.setKey(key));
	},
	// 移除临时缓存
	remove(key: string) {
		Cookies.remove(Local.setKey(key));
	},
	// 移除全部临时缓存
	clear() {
		Cookies.remove(Local.setKey('token'));
		Cookies.remove(Local.setKey('user'));
		Cookies.remove(Local.setKey('wexToken'));
	},
};
