/**
 * 
 * @description telStatus 当前用户签入的状态
 * @method  setDutyState 设置签入签出状态
 * @method  setCallOut 设置外呼模式状态
 * @method  setRest 设置休息状态
 * @method  setTalkingDeal 设置话后整理状态
 * @method  setHold 设置保持状态
 * @method  setPhoneControlState 设置电话控件状态
 * @method  setCallInfo 设置当前通话信息
 * @method resetState 重置状态
 */
import { defineStore } from 'pinia';
export enum TelStates {
	dutyOff = 'dutyOff', // 签出
	dutyOn = 'dutyOn', // 签入
	onCallOut = 'onCallOut', // 外呼模式中
	rest = 'rest',  // 小休
	ring = 'ring', // 来电响铃
	onHold = 'onHold', // 保持中
	onMute = 'onMute', // 静音中
	onCall = 'onCall', // 一通电话通话中
	onTalkingDeal = 'onTalkingDeal', 		// 事后处理中
	onConference = 'onConference', // 三方会议中
	onThreeWay = 'onThreeWay', // 三方通话中
}
export enum RestStates {
	resting = 'resting', // 小休中
	InReview = 'InReview', // 小休审批中
	unRest = 'unRest' // 未小休
}
export const useTelStatus = defineStore('telStatus', {
	state: (): {
		telStatusInfo: {
			isCallOut: boolean;
			fromTel: string;
			callId: string;
			isMute: boolean;
			isMeeting: boolean;
			isDutyOn: boolean;
			isHold: boolean;
			isTalkingDeal: boolean;
			telsNo: string;
			groupName: string;
			telGongHao: string;
			telType: string;
			telArea: string;
			isRest: RestStates;
			phoneControlState: TelStates;
			telIVR: string
		}
	} => ({
		telStatusInfo: {
			isDutyOn: false, // 是否签入
			isRest: RestStates.unRest, // 是否休息  'resting'|'InReview'|'unRest'; 休息中  审核中 其他状态
			isTalkingDeal: false, //是否事后处理
			isMeeting: false, //是否三方会议中
			isHold: false, // 是否保持中
			isMute: false,
			isCallOut: false, // 是否是外呼模式
			phoneControlState: TelStates.dutyOff, //当前状态 默认签出
			telsNo: "", // 分机号
			groupName: "", // 分机组名称
			telGongHao: "", // 电话工号
			telArea: "", // 电话区号
			callId: "", // 电话guid
			telIVR: "", // 电话IVR
			telType: "", //来电 外呼 转接
			fromTel: "", // 来电号码
		}
	}),
	actions: {
		// 设置签入签出状态
		setDutyState(data: boolean): void {
			this.telStatusInfo.isDutyOn = data;
		},
		// 设置休息状态
		setRest(data: RestStates): void {
			this.telStatusInfo.isRest = data;
		},
		// 设置时候处理状态
		setTalkingDeal(data: boolean): void {
			this.telStatusInfo.isTalkingDeal = data;
		},
		// 设置保持状态
		setHold(data: boolean): void {
			this.telStatusInfo.isHold = data;
		},
		// 设置静音状态
		setMute(data: boolean): void {
			this.telStatusInfo.isMute = data;
		},
		// 设置外呼模式
		setCallOut(data: boolean): void {
			this.telStatusInfo.isCallOut = data;
		},
		// 设置是否在三方会议中
		setMetTing(data: boolean): void {
			this.telStatusInfo.isMeeting = data;
		},
		// 设置电话控件状态
		setPhoneControlState(data: TelStates): void {
			this.telStatusInfo.phoneControlState = data;
		},
		// 设置当前通话信息
		setCallInfo(data:any): void {
			this.telStatusInfo = {
				...this.telStatusInfo,
				...data
			};
		},
		// 签出重置所有状态
		resetState(): void {
			this.telStatusInfo = {
				isDutyOn: false, // 是否签入
				isRest: RestStates.unRest, // 是否休息
				isTalkingDeal: false, //是否事后处理
				isMeeting: false, //是否三方会议中
				isHold:false, // 是否保持中
				isMute: false, // 是否静音
				isCallOut:false, // 是否是外呼模式
				phoneControlState: TelStates.dutyOff, //当前状态 默认签出
				telsNo: "", // 分机号
				groupName: "", // 分机组名称
				telGongHao: "", // 电话工号
				telArea: "", // 电话区号
				callId: "", // 电话guid
				telIVR: "", // 电话IVR
				telType: "", //来电 外呼 转接
				fromTel: "", // 来电号码
			}
		}
	},
	// 开启数据缓存
	persist: {
		enabled: true,
		strategies: [
			{
				//key的名称
				key: `${import.meta.env.VITE_STORAGE_NAME}_telStatusInfo`,
				//更改默认存储，我更改为localStorage
				storage: localStorage,
				// 可以选择哪些进入local存储，这样就不用全部都进去存储了
				// 默认是全部进去存储
			},
			// {
			// 	key: `${import.meta.env.VITE_STORAGE_NAME}_base`,
			// 	storage: localStorage,
			// 	paths: ['isDutyOn','isRest']
			// },
			// {
			// 	key: `${import.meta.env.VITE_STORAGE_NAME}_base2`,
			// 	storage: sessionStorage,
			// 	paths: ['telsNo']
			// },
		]
	}
});
