local ActivityLevelsInstanceRoomInfo = class("ActivityLevelsInstanceRoomInfo", BaseCtrl)
local colorWhite = Color(1, 1, 1, 1)
local colorRed = Color(0.8470588235294118, 0.3137254901960784, 0.32941176470588235)
ActivityLevelsInstanceRoomInfo._mapNodeConfig = {
	BossChallenge = {
		sCtrlName = "Game.UI.DailyInstanceRoomInfo.DailyInstanceExp.DailyInstanceExp"
	},
	canvasGroup = {
		sNodeName = "----SafeAreaRoot----",
		sComponentName = "CanvasGroup"
	},
	rtnfo = {},
	TMPTitle = {
		sComponentName = "TMP_Text",
		sLanguageId = "DailyInstanceExp_SubTitle"
	},
	TMPDesc = {sComponentName = "TMP_Text"},
	TMPChallengeTime = {sComponentName = "TMP_Text"},
	btnStar = {sComponentName = "Button", nCount = 3},
	rtChallengeTime = {},
	animatorTime = {
		sNodeName = "rtChallengeTime",
		sComponentName = "Animator"
	},
	AnimatorInfo = {sNodeName = "rtnfo", sComponentName = "Animator"},
	AnimatorRoot = {
		sNodeName = "BossChallenge",
		sComponentName = "Animator"
	}
}
ActivityLevelsInstanceRoomInfo._mapEventConfig = {
	OpenActivityLevelsInstanceRoomInfo = "OnEvent_OpenUI",
	ActivityLevelsInstanceLevelEnd = "OnEvent_CloseUI",
	InputEnable = "OnEvent_InputEnable",
	ActivityLevelsInstanceBattleEnd = "OnEvent_BattleEnd",
	ActivityLevels_Instance_Gameplay_Time = "OnEvent_SpecialMode_Count"
}
function ActivityLevelsInstanceRoomInfo:Awake()
end
function ActivityLevelsInstanceRoomInfo:FadeIn()
end
function ActivityLevelsInstanceRoomInfo:FadeOut()
end
function ActivityLevelsInstanceRoomInfo:OnEnable()
	self.bBattleEnd = false
end
function ActivityLevelsInstanceRoomInfo:OnDisable()
end
function ActivityLevelsInstanceRoomInfo:OnDestroy()
end
function ActivityLevelsInstanceRoomInfo:OnRelease()
end
function ActivityLevelsInstanceRoomInfo:OnEvent_OpenUI(nLevelId)
	self._mapNode.BossChallenge.gameObject:SetActive(true)
	self:StartEvent(1, nLevelId)
end
function ActivityLevelsInstanceRoomInfo:OnEvent_CloseUI()
	self:LevelEnd()
end
function ActivityLevelsInstanceRoomInfo:OnEvent_InputEnable(bEnable)
	if self.bBattleEnd == true then
		return
	end
	NovaAPI.SetCanvasGroupAlpha(self._mapNode.canvasGroup, bEnable == true and 1 or 0)
	NovaAPI.SetCanvasGroupInteractable(self._mapNode.canvasGroup, bEnable == true)
	NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.canvasGroup, bEnable == true)
end
function ActivityLevelsInstanceRoomInfo:OnEvent_BattleEnd()
	self.bBattleEnd = true
end
function ActivityLevelsInstanceRoomInfo:StartEvent(nWaitTime, nLevelId)
	self.mapLevelCfgData = ConfigTable.GetData("ActivityLevelsLevel", nLevelId)
	self.tbTime = {
		self.mapLevelCfgData.ThreeStarCondition[1],
		self.mapLevelCfgData.TwoStarCondition[1],
		self.mapLevelCfgData.OneStarCondition[1]
	}
	self.totalTime = self.mapLevelCfgData.OneStarCondition[1]
	self.nState = 1
	self.bEnd = false
	self._mapNode.rtnfo:SetActive(false)
	self._mapNode.rtChallengeTime:SetActive(false)
	self._mapNode.TMPDesc.gameObject:SetActive(false)
	self:SetTime(self.totalTime)
	NovaAPI.SetTMPColor(self._mapNode.TMPChallengeTime, colorWhite)
	local nStateDesc = 3 - #self.tbTime > 0 and 3 - #self.tbTime or 1
	if nStateDesc < 3 then
		local nextStateTime = self.totalTime - self.tbTime[nStateDesc]
		if 0 < nextStateTime then
			NovaAPI.SetTMPText(self._mapNode.TMPDesc, orderedFormat(ConfigTable.GetUIText("DailyInstanceExp_SubTips"), nextStateTime, tostring(4 - nStateDesc)))
		else
			NovaAPI.SetTMPText(self._mapNode.TMPDesc, ConfigTable.GetUIText("DailyInstanceExp_SubTips_Zero"))
		end
	else
		NovaAPI.SetTMPText(self._mapNode.TMPDesc, ConfigTable.GetUIText("DailyInstanceExp_SubTips_Zero"))
	end
	for i = 1, 3 do
		self._mapNode.btnStar[i].interactable = true
	end
	local waitCallback = function()
		self._mapNode.rtnfo:SetActive(true)
		self._mapNode.rtChallengeTime:SetActive(true)
		self._mapNode.TMPDesc.gameObject:SetActive(true)
	end
	self:AddTimer(1, nWaitTime, waitCallback, true, true, false)
end
function ActivityLevelsInstanceRoomInfo:OnEvent_SpecialMode_Count(nTime)
	if self.tbTime[self.nState] ~= nil then
		if self.tbTime[self.nState] - nTime <= 5 then
			NovaAPI.SetTMPColor(self._mapNode.TMPChallengeTime, colorRed)
			self._mapNode.animatorTime:Play("BossChallengeTime_show")
		else
			NovaAPI.SetTMPColor(self._mapNode.TMPChallengeTime, colorWhite)
		end
		if self.tbTime[self.nState] - nTime == 5 then
			self._mapNode.AnimatorRoot:Play("BossChallenge_" .. 4 - self.nState)
		end
		if nTime >= self.tbTime[self.nState] then
			self:StageChange()
		end
	else
		NovaAPI.SetTMPColor(self._mapNode.TMPChallengeTime, colorWhite)
	end
	local RemainingT = self.totalTime - nTime
	if 0 <= RemainingT then
		self:SetTime(RemainingT)
	end
end
function ActivityLevelsInstanceRoomInfo:StageChange()
	if self.bEnd then
		return
	end
	self.nState = self.nState + 1
	local failedCallback = function()
		if self.bEnd then
			self._mapNode.TMPDesc.gameObject:SetActive(false)
			return
		end
		local nStateDesc = 3 - #self.tbTime + self.nState > 0 and 3 - #self.tbTime + self.nState or 1
		if nStateDesc < 3 then
			local nextStateTime = self.totalTime - self.tbTime[nStateDesc]
			if 0 < nextStateTime then
				NovaAPI.SetTMPText(self._mapNode.TMPDesc, orderedFormat(ConfigTable.GetUIText("DailyInstanceExp_SubTips"), nextStateTime, tostring(4 - nStateDesc)))
			else
				NovaAPI.SetTMPText(self._mapNode.TMPDesc, ConfigTable.GetUIText("DailyInstanceExp_SubTips_Zero"))
			end
			for i = 1, 3 do
				if i <= 4 - nStateDesc then
					self._mapNode.btnStar[i].interactable = true
				else
					self._mapNode.btnStar[i].interactable = false
				end
			end
		else
			NovaAPI.SetTMPText(self._mapNode.TMPDesc, ConfigTable.GetUIText("DailyInstanceExp_SubTips_Zero"))
			self._mapNode.btnStar[1].interactable = true
			self._mapNode.btnStar[2].interactable = false
			self._mapNode.btnStar[3].interactable = false
		end
	end
	failedCallback()
end
function ActivityLevelsInstanceRoomInfo:SetTime(nTime)
	local nMin = math.floor(nTime / 60)
	local nSec = math.fmod(nTime, 60)
	NovaAPI.SetTMPText(self._mapNode.TMPChallengeTime, string.format("%02d:%02d", nMin, nSec))
end
function ActivityLevelsInstanceRoomInfo:LevelEnd()
	self._mapNode.AnimatorInfo:Play("FRRoomInfo_rtnfo_out")
	local close = function()
		self.gameObject:SetActive(false)
	end
	self:AddTimer(1, 0.35, close, true, true, true)
end
return ActivityLevelsInstanceRoomInfo
