import MainControl from "@/Common/MainControl/MainControl";
import { CoroutineV2 } from "@/Engine/CatanEngine/CoroutineV2/CoroutineV2";
import { TTeamBattleData } from "@/UI/RouterPage/GameContent/GameContentUtils";
import { Cocos } from "@/assets/VueScript/Cocos";
import { CommonEventCallBack } from "@/assets/VueScript/CocosVueScript";
import GameData_Cocos from "@/assets/VueScript/share/GameData_Cocos";
import { GiftCallBack, GiftEventEnum, PanelType, UpdateOneListInfo } from "@/components/ModalContent/TxnModal/txnUtils";
import { gameObj } from "@/context/GameItemsContext";
import { LocalStorage } from "@/define";
import { EActivitySyncType, RpcActivityComSyncResponse, TActivityComSyncData, TActivitySyncData } from "@/define/Request/ActivityRequest";
import { ResponseBackpackInfo } from "@/define/Request/BackpackRequest";
import { FriendRequest } from "@/define/Request/FriendRequest";
import { ProfileRequest } from "@/define/Request/ProfileRequest";
import { TxnRequest } from "@/define/Request/TxnRequest";
import { VipRequest } from "@/define/Request/VIPRequest";
import Player from "@/modules/player";
import { State } from "@/modules/player/define/data";
import { BackpackItemData } from "@/modules/player/define/data/backpack";
import { CommonEventType } from ".";

let SN: number = 0;

export function profileInfo(data: ProfileRequest.InfoResponse): void {
	const playerData: State = Player.data.getState();
	if (data.aId !== playerData.account.aId) {
		return;
	}
	playerData.account.name = data.name;
	playerData.account.message = data.msg;
	playerData.account.phone = data.phone;
	playerData.account.money = data.money;
	playerData.vip.level = data.vip;
	Player.data.setState(playerData);
}

export function vipInfo(data: VipRequest.InfoResponse): void {
	const playerData: State = Player.data.getState();
	playerData.vip.level = data.level;
	playerData.vip.totalBet = data.bet;
	playerData.vip.totalCharge = data.sv;
	playerData.vip.rich = data.rich;
	playerData.vip.et = data.et;
	Player.data.setState(playerData);
}

export function friendAllowList(data: FriendRequest.ListFriendData): void {
	const playerData: State = Player.data.getState();
	playerData.account.allowList = data;
	Player.data.setState(playerData);
}

export function friendDenyList(data: FriendRequest.ListFriendData): void {
	const playerData: State = Player.data.getState();
	playerData.account.denyList = data;
	Player.data.setState(playerData);
}

export function activityComSync(data: RpcActivityComSyncResponse): void {
	const { teamBattleData, setTeamBattleData } = gameObj;
	for (let i = 0; i < data.length; i++) {
		const activityComSyncData: TActivityComSyncData = data[i];
		const [id, activitySyncDatas] = activityComSyncData;
		// for (let j = 0; j < teamBattleData.length; j++) {
		// 	const teamBattle: TTeamBattleData = teamBattleData[j];
		// 	const [teamBattleId, , ,] = teamBattle;
		// 	if (id === teamBattleId) {
		// 		for (let k = 0; k < activitySyncDatas.length; k++) {
		// 			const activitySyncData: TActivitySyncData = activitySyncDatas[k];
		// 			const [type, value] = activitySyncData;
		// 			switch (type) {
		// 				case EActivitySyncType.IsOpen: {
		// 					teamBattleData[j][1] = -1;
		// 					setTeamBattleData(teamBattleData);
		// 					break;
		// 				}

		// 				case EActivitySyncType.Sync: {
		// 					teamBattleData[j][1] = value;
		// 					setTeamBattleData(teamBattleData);
		// 					break;
		// 				}

		// 				case EActivitySyncType.Task: {

		// 					break;
		// 				}

		// 				default:
		// 					break;
		// 			}
		// 		}
		// 		break;
		// 	}
		// }


		for (let j = 0; j < activitySyncDatas.length; j++) {
			const activitySyncData: TActivitySyncData = activitySyncDatas[j];
			const [type, value] = activitySyncData;
			switch (type) {
				case EActivitySyncType.IsOpen: {
					// for (let k = 0; k < teamBattleData.length; k++) {
					// 	const teamBattle: TTeamBattleData = teamBattleData[k];
					// 	const [teamBattleId, , ,] = teamBattle;
					// 	if (id === teamBattleId) {
					// 		teamBattleData[j][1] = value;
					// 		setTeamBattleData(teamBattleData);
					// 		break;
					// 	}
					// }
					break;
				}

				case EActivitySyncType.Sync: {
					for (let k = 0; k < teamBattleData.length; k++) {
						const teamBattle: TTeamBattleData = teamBattleData[k];
						const [teamBattleId, , ,] = teamBattle;
						if (id === teamBattleId) {
							teamBattleData[j][1] = value;
							setTeamBattleData(teamBattleData);
							break;
						}
					}
					break;
				}

				case EActivitySyncType.Task: {

					break;
				}

				default:
					break;
			}
		}
	}
	CommonEventCallBack.DispatchCallback(CommonEventType.ActivityReRender, null);
}

export function backpackInfo(data: ResponseBackpackInfo[], isAdd: boolean = false): void {
	const playerData: State = Player.data.getState();
	const backpackList: BackpackItemData[] = isAdd ? playerData.backpack.Copy() : [];
	for (let i = 0; i < data.length; i++) {
		const backpackServerData = data[i];
		const id: number = backpackServerData[1][0];
		const count: number = backpackServerData[1][1];
		for (let j = 0; j < count; j++) {
			const backpackClientData: BackpackItemData = {
				SN: SN,
				ResourceType: backpackServerData[0],
				ID: id,
				Viewed: false,
			};
			backpackList.push(backpackClientData);
			SN++;
		}
	}
	if (!isAdd) {
		const oldBackpackListStr: string = localStorage.getItem(LocalStorage.Key.Backpack);
		if (oldBackpackListStr) {
			const oldBackpackList: BackpackItemData[] = JSON.parse(oldBackpackListStr);
			for (let i = 0; i < backpackList.length; i++) {
				const backpack: BackpackItemData = backpackList[i];
				for (let j = 0; j < oldBackpackList.length; j++) {
					const oldBackpack: BackpackItemData = oldBackpackList[j];
					if (backpack.ID === oldBackpack.ID && backpack.ResourceType === oldBackpack.ResourceType) {
						backpackList[i].Viewed = oldBackpack.Viewed;
						oldBackpackList.splice(j, 1);
						break;
					}
				}
			}
		}
	}
	playerData.backpack = backpackList;
	localStorage.setItem(LocalStorage.Key.Backpack, JSON.stringify(playerData.backpack));
	Player.data.setState(playerData);

	const totalUnreadCount: number = playerData.backpack.filter((item) => !item.Viewed).length;
	if (!MainControl.Instance.IsInGame) {
		Cocos.CocosEventListener.DispatchCallback(GameData_Cocos.CELT.SetBackpackUnreadCount, totalUnreadCount);
	}
}

export function txnNew(data: TxnRequest.TxnInfo): void {
	const playerData = Player.data.getState();
	const centerList = playerData.txn.centerList.slice();
	centerList.push(data);
	playerData.txn.centerList = centerList;
	GiftCallBack.DispatchCallback(GiftEventEnum.ReFlash, null);
	Cocos.CocosEventListener.DispatchCallback(GameData_Cocos.CELT.SetTxnUnreadCount, playerData.txn.centerList.length);
	Player.data.setState(playerData);
}

export function txnCenter(data: TxnRequest.TxnInfo[]): void {
	const playerData = Player.data.getState();
	playerData.txn.centerList = data;
	GiftCallBack.DispatchCallback(GiftEventEnum.ReFlash, null);
	Cocos.CocosEventListener.DispatchCallback(GameData_Cocos.CELT.SetTxnUnreadCount, playerData.txn.centerList.length);
	Player.data.setState(playerData);
}

export function txnTrade(data: TxnRequest.TradeResponse): void {
	const playerData: State = Player.data.getState();
	const centerList: TxnRequest.TxnInfo[] = playerData.txn.centerList;
	let type: number = PanelType.RecordPanel;
	let status: number = +data.s;
	if (status < 20) {
		type = PanelType.CenterPanel;
		switch (status) {
			case 11:
			case 12:
			case 13: {
				for (let i: number = 0; i < centerList.length; i++) {
					const centerData: TxnRequest.TxnInfo = centerList[i];
					if (centerData[0] == +data.id && centerData[3][0] == playerData.account.aId) {
						type = PanelType.RecordPanel;
						break;
					}
				}
				break;
			}
			default:
				break;
		}
	}

	CoroutineV2.Single(UpdateOneListInfo(data.id, type)).Start();
}

export function txnUserAdd(data: TxnRequest.UserAddResponse): void {
	const playerData: State = Player.data.getState();
	playerData.txn.receiverList.push(data.u);
	Player.data.setState(playerData);
}