local RoguelikeResultCtrlEx = class("RoguelikeResultCtrlEx", BaseCtrl)
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
RoguelikeResultCtrlEx._mapNodeConfig = {
	img_TitleComplete = {sComponentName = "GameObject"},
	img_TitleFaild = {sComponentName = "GameObject"},
	Mask = {
		sComponentName = "CanvasGroup"
	},
	rawImgActor2D = {
		sNodeName = "----Actor2D----",
		sComponentName = "RawImage"
	},
	imgBlurredBg = {sComponentName = "GameObject"},
	txt_FloorProcess = {sComponentName = "Text"},
	txt_PerkCount = {sComponentName = "Text"},
	ButtonClose = {
		sComponentName = "Button",
		callback = "OnBtnClick_Close"
	},
	txt_RogueLevelName = {sComponentName = "Text"},
	RewardPanel = {sComponentName = "GameObject"},
	uieffectBg = {sComponentName = "GameObject"},
	getPanel = {sComponentName = "GameObject"},
	tempItem = {sComponentName = "GameObject"},
	btnClose = {
		sComponentName = "Button",
		callback = "OnBtnClick_CloseReward"
	},
	goBg = {sNodeName = "----BG----"},
	panel_1 = {sComponentName = "GameObject"},
	ItemRoot = {sComponentName = "Transform"},
	img_PerkIcon = {},
	panel_2 = {sComponentName = "GameObject"},
	GetContent = {
		sComponentName = "RectTransform"
	}
}
RoguelikeResultCtrlEx._mapEventConfig = {}
function RoguelikeResultCtrlEx:ShowReward(mapChangeInfo, strength)
	local tbReward = {}
	if type(mapChangeInfo["proto.Res"]) == "table" then
		for _, mapCoin in ipairs(mapChangeInfo["proto.Res"]) do
			table.insert(tbReward, {
				id = mapCoin.Tid,
				Qty = mapCoin.Qty
			})
		end
	end
	if type(mapChangeInfo["proto.Presents"]) == "table" then
		for _, mapInfo in ipairs(mapChangeInfo["proto.Presents"]) do
			table.insert(tbReward, {
				id = mapInfo.Info.Tid,
				Qty = mapInfo.Info.Qty
			})
		end
	end
	if type(mapChangeInfo["proto.Item"]) == "table" then
		for _, mapItem in ipairs(mapChangeInfo["proto.Item"]) do
			table.insert(tbReward, {
				id = mapItem.Tid,
				Qty = mapItem.Qty
			})
		end
	end
	if type(mapChangeInfo["proto.Outfit"]) == "table" then
		for _, mapInfo in ipairs(mapChangeInfo["proto.Outfit"]) do
			table.insert(tbReward, {
				id = mapInfo.Info.Tid,
				Qty = mapInfo.Qty
			})
		end
	end
	if type(mapChangeInfo["proto.Disc"]) == "table" then
		for _, mapInfo in ipairs(mapChangeInfo["proto.Disc"]) do
			table.insert(tbReward, {
				id = mapInfo.Id,
				count = 1
			})
		end
	end
	if strength ~= 0 then
		table.insert(tbReward, 1, {id = 4, Qty = strength})
	end
	if #tbReward == 0 then
		self:OnBtnClick_CloseReward()
		return
	end
	for _, v in ipairs(tbReward) do
		local nItemId = v.id
		local cfgDataItem = ConfigTable.GetData_Item(nItemId)
		local goItem
		if #tbReward <= 6 then
			goItem = instantiate(self._mapNode.tempItem, self._mapNode.ItemRoot)
		else
			goItem = instantiate(self._mapNode.tempItem, self._mapNode.GetContent)
		end
		goItem.name = tostring(nItemId)
		local tr = goItem.transform
		local imgBg = goItem:GetComponent("Image")
		local imgIcon = tr:Find("itemIcon"):GetComponent("Image")
		local txtItemCount = tr:Find("itemCount"):GetComponent("Text")
		self:SetSprite_FrameColor(imgBg, cfgDataItem.Rarity, AllEnum.FrameType_New.ItemS)
		self:SetPngSprite(imgIcon, cfgDataItem.Icon)
		NovaAPI.SetText(txtItemCount, v.Qty)
		goItem:SetActive(true)
		local btnSelect = tr:Find("itemBtn"):GetComponent("Button")
		btnSelect.onClick:RemoveAllListeners()
		local cbSelect = function()
			self:OnSelectItem(nItemId, imgBg.gameObject:GetComponent("RectTransform"))
		end
		btnSelect.onClick:AddListener(cbSelect)
	end
	if #tbReward <= 6 then
		self._mapNode.panel_1:SetActive(true)
	else
		self._mapNode.panel_2:SetActive(true)
	end
	self._mapNode.RewardPanel:SetActive(true)
	self._mapNode.uieffectBg:SetActive(true)
	local wait = function()
		coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
		self._mapNode.getPanel:SetActive(true)
	end
	cs_coroutine.start(wait)
end
function RoguelikeResultCtrlEx:Awake()
	EventManager.Hit(EventId.AvgBubbleShutDown)
	NovaAPI.SetComponentEnableByName(self.gameObject, "Canvas", false)
end
function RoguelikeResultCtrlEx:OnEnable()
	local tbParam = self:GetPanelParam()
	local nResultState = tbParam[1]
	self.mapChangeInfo = tbParam[2]
	self.strength = tbParam[3]
	self.mapBuild = tbParam[4]
	local curFloor = tbParam[5]
	local totalFloor = tbParam[6]
	local perkCount = tbParam[7]
	self.tbBonus = tbParam[8]
	if PlayerData.nCurGameType ~= AllEnum.WorldMapNodeType.Roguelike then
		self._mapNode.goBg:SetActive(true)
		local nFloor = 1
		local mapFloorData = ConfigTable.GetData("RoguelikeFloor", nFloor)
		local nRoguelikeId = mapFloorData.RoguelikeId
		local mapRoguelike = ConfigTable.GetData("Roguelike", nRoguelikeId)
		NovaAPI.SetText(self._mapNode.txt_RogueLevelName, mapRoguelike.Name)
		NovaAPI.SetText(self._mapNode.txt_FloorProcess, string.format("%d/%d", mapFloorData.Floor, totalFloor))
		NovaAPI.SetText(self._mapNode.txt_PerkCount, "?")
		NovaAPI.SetComponentEnableByName(self.gameObject, "Canvas", true)
	else
		local nRoguelikeId = PlayerData.Roguelike:GetCurRoguelikeId()
		local mapRoguelike = ConfigTable.GetData("Roguelike", nRoguelikeId)
		NovaAPI.SetText(self._mapNode.txt_RogueLevelName, mapRoguelike.Name)
		NovaAPI.SetText(self._mapNode.txt_FloorProcess, string.format("%d/%d", curFloor, totalFloor))
		NovaAPI.SetText(self._mapNode.txt_PerkCount, tostring(perkCount))
	end
	self._mapNode.imgBlurredBg:SetActive(true)
	local captainID, teamMemberid = PlayerData.Team:GetTeamData(5)
	if nResultState == 1 then
		self._mapNode.img_TitleFaild:SetActive(false)
		self._mapNode.img_TitleComplete:SetActive(true)
		Actor2DManager.SetActor2D(self:GetPanelId(), self._mapNode.rawImgActor2D, teamMemberid[math.random(1, 3)], nil, true)
		self.gameObject:GetComponent("Animator"):Play("transition_in_complete")
	else
		self._mapNode.img_TitleFaild:SetActive(true)
		self._mapNode.img_TitleComplete:SetActive(false)
		Actor2DManager.SetActor2D(self:GetPanelId(), self._mapNode.rawImgActor2D, teamMemberid[math.random(1, 3)], nil, false)
		self.gameObject:GetComponent("Animator"):Play("transition_in_faild")
	end
	self._mapNode.Mask.gameObject:SetActive(false)
	local wait = function()
		coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
		CS.AdventureModuleHelper.PauseLogic()
		NovaAPI.SetComponentEnableByName(self.gameObject, "Canvas", true)
	end
	cs_coroutine.start(wait)
end
function RoguelikeResultCtrlEx:OnDisable()
	Actor2DManager.UnsetActor2D()
end
function RoguelikeResultCtrlEx:OnDestroy()
end
function RoguelikeResultCtrlEx:OnBtnClick_Close(btn)
	self:ShowReward(self.mapChangeInfo, self.strength)
end
function RoguelikeResultCtrlEx:OnBtnClick_CloseReward(btn)
	CS.AdventureModuleHelper.ResumeLogic()
	if self.mapBuild ~= nil then
		if self.mapBuild.BuildCoin ~= nil and self.mapBuild.BuildCoin > 0 then
			EventManager.Hit(EventId.OpenPanel, PanelId.RoguelikeBuildSave, self.mapBuild.BuildCoin)
			return
		elseif self.mapBuild.Brief ~= nil then
			PlayerData.Build:CacheRogueBuild(self.mapBuild)
			local buildDetailcallback = function(mapBuild)
				EventManager.Hit(EventId.OpenPanel, PanelId.RoguelikeBuildSave, mapBuild, self.tbBonus)
			end
			PlayerData.Build:GetBuildDetailData(buildDetailcallback, self.mapBuild.Brief.BuildId)
			return
		end
	end
	if NovaAPI.GetCurrentModuleName() == "MainMenuModuleScene" then
		EventManager.Hit(EventId.CloesCurPanel)
		EventManager.Hit("CloseRoguelikeResultCtrlEx")
	else
		NovaAPI.SetCanvasGroupAlpha(self._mapNode.Mask, 0)
		self._mapNode.Mask.gameObject:SetActive(true)
		local sequence = DOTween.Sequence()
		sequence:Append(self._mapNode.Mask:DOFade(1, 0.5):SetUpdate(true))
		sequence:AppendCallback(function()
			CS.AdventureModuleHelper.LevelStateChanged(true)
			self._mapNode.imgBlurredBg:SetActive(false)
		end)
		sequence:SetUpdate(true)
	end
end
function RoguelikeResultCtrlEx:OnSelectItem(itemId, rtIcon)
	local mapItemCfgData = ConfigTable.GetData_Item(itemId)
	if mapItemCfgData.Stype == GameEnum.itemStype.Outfit then
	else
		if mapItemCfgData.Stype == GameEnum.itemStype.Present then
		else
		end
	end
end
return RoguelikeResultCtrlEx
