local InfinityTowerPlot = class("InfinityTowerPlot", BaseCtrl)
InfinityTowerPlot._mapNodeConfig = {
	goPlot = {},
	tex_plot_Title = {
		sComponentName = "TMP_Text",
		sLanguageId = "InfinityTower_Plot_Review"
	},
	plotList = {
		sComponentName = "LoopScrollView"
	},
	goPlotRoot = {},
	rtWindowAni = {sNodeName = "rtWindow", sComponentName = "Animator"},
	txtGoPlotTitle = {
		sComponentName = "TMP_Text",
		sLanguageId = "InfinityTower_Plot_Review"
	},
	cancelPlotAvgBtnTex = {
		sComponentName = "TMP_Text",
		sLanguageId = "MessageBox_Cancel"
	},
	goPlotAvgBtnTex = {
		sComponentName = "TMP_Text",
		sLanguageId = "WorldMap_MainLine_Avg_Btn"
	},
	txtGoPlotReward = {
		sComponentName = "TMP_Text",
		sLanguageId = "STRanking_Reward_Btn"
	},
	goPlotRootMask = {
		sComponentName = "Button",
		callback = "OnBtn_ClickCloseGoPlotPanel"
	},
	btnGoPlotClose = {
		sComponentName = "UIButton",
		callback = "OnBtn_ClickCloseGoPlotPanel"
	},
	btnCancelGoPlot = {
		sComponentName = "UIButton",
		callback = "OnBtn_ClickCloseGoPlotPanel"
	},
	btnSureGoPlot = {
		sComponentName = "UIButton",
		callback = "OnBtn_ClickPlayPlot"
	},
	goRewardInfo = {},
	goPlotLvNum = {sComponentName = "TMP_Text"},
	goPlotLvName = {sComponentName = "TMP_Text"},
	goPlotLvDes = {sComponentName = "TMP_Text"},
	imgGoPlotReward = {sComponentName = "Image"},
	txtGoPlotRewardCount = {sComponentName = "TMP_Text"}
}
InfinityTowerPlot._mapEventConfig = {
	Refresh_Infinity_PlotList = "OnEvent_RefreshInfinityPlotList"
}
function InfinityTowerPlot:OpenPlotView()
	self.AniRoot = self.gameObject:GetComponent("Animator")
	self._mapNode.goPlot.gameObject:SetActive(false)
	local wait = function()
		self:InitPlotMsg()
		coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
		self.AniRoot.enabled = true
		coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
		self._mapNode.goPlot.gameObject:SetActive(true)
	end
	cs_coroutine.start(wait)
	self.gameObject:SetActive(true)
end
function InfinityTowerPlot:InitPlotMsg()
	local count = 0
	self.tabPlot = {}
	local foreach_Base = function(baseData)
		count = count + 1
		self.tabPlot[count] = baseData
	end
	ForEachTableLine(DataTable.InfinityTowerPlot, foreach_Base)
	self._mapNode.plotList:Init(count, self, self.InitPlotList)
	local tmpCount = 1
	for i = 1, count do
		if PlayerData.InfinityTower:GetPlotUnLock(self.tabPlot[i].Id) and not PlayerData.InfinityTower:GetPlotGetReward(self.tabPlot[i].Id) then
			tmpCount = i
			break
		end
	end
	if 0 < count then
		self._mapNode.plotList:SetScrollGridPos(tmpCount, 0.1, 0)
	end
end
function InfinityTowerPlot:OnEvent_RefreshInfinityPlotList()
	self:InitPlotMsg()
end
function InfinityTowerPlot:InitPlotList(goGrid, gridIndex)
	local index = gridIndex + 1
	local plotData = self.tabPlot[index]
	local isUnLock = PlayerData.InfinityTower:GetPlotUnLock(plotData.Id)
	local plot_item_bg = goGrid.transform:Find("gridRt/plot_item_bg"):GetComponent("Image")
	local unlock = goGrid.transform:Find("gridRt/unlock").gameObject
	local lock = goGrid.transform:Find("gridRt/lock").gameObject
	if isUnLock then
		NovaAPI.SetImageColor(plot_item_bg, Color(1, 1, 1, 1))
		unlock:SetActive(true)
		lock:SetActive(false)
		local plot_item_Index = unlock.transform:Find("plot_item_Index"):GetComponent("TMP_Text")
		local plot_item_Name = unlock.transform:Find("plot_item_Name"):GetComponent("TMP_Text")
		local plot_item_Reward = unlock.transform:Find("plot_item_Reward").gameObject
		local plot_item_RewardReview = unlock.transform:Find("plot_item_RewardReview"):GetComponent("UIButton")
		local redDot = unlock.transform:Find("redDot").gameObject
		local isGet = PlayerData.InfinityTower:GetPlotGetReward(plotData.Id)
		if isGet then
			plot_item_Reward:SetActive(false)
			redDot:SetActive(false)
		else
			local plot_item_RewardIcon = unlock.transform:Find("plot_item_Reward/plot_item_RewardIcon"):GetComponent("Image")
			local plot_item_RewardCount = unlock.transform:Find("plot_item_Reward/plot_item_RewardCount"):GetComponent("TMP_Text")
			self:SetPngSprite(plot_item_RewardIcon, ConfigTable.GetData_Item(plotData.RewardItemId).Icon2)
			NovaAPI.SetTMPText(plot_item_RewardCount, "×" .. plotData.RewardItemQty)
			plot_item_Reward:SetActive(true)
			redDot:SetActive(true)
		end
		NovaAPI.SetTMPText(plot_item_Index, plotData.Name)
		NovaAPI.SetTMPText(plot_item_Name, plotData.Desc)
		plot_item_RewardReview.onClick:RemoveAllListeners()
		local clickCb = function()
			self:ShowGoPlotPanel(plotData)
		end
		plot_item_RewardReview.onClick:AddListener(clickCb)
	else
		NovaAPI.SetImageColor(plot_item_bg, Color(1, 1, 1, 0.6))
		unlock:SetActive(false)
		lock:SetActive(true)
		local plot_item_LockMsg = lock.transform:Find("plot_item_LockMsg"):GetComponent("TMP_Text")
		local _cond = plotData.UnlockCond
		if _cond ~= 0 then
			if _cond == GameEnum.InfinityTowerCond.LevelClearWithSpecificId then
				local lvId = plotData.CondParam[1]
				local lvData = ConfigTable.GetData("InfinityTowerLevel", lvId)
				NovaAPI.SetTMPText(plot_item_LockMsg, orderedFormat(ConfigTable.GetUIText("InfinityTower_Cond_WithSpecificId"), lvData.Name))
			elseif _cond == GameEnum.InfinityTowerCond.InfinityTowerWithSpecificLevelTotal then
				NovaAPI.SetTMPText(plot_item_LockMsg, orderedFormat(ConfigTable.GetUIText("InfinityTower_Cond_WithSpecificLevelTotal"), plotData.CondParam[1]))
			elseif _cond == GameEnum.InfinityTowerCond.AnyTowerWithSpecificTotalLevel then
				NovaAPI.SetTMPText(plot_item_LockMsg, orderedFormat(ConfigTable.GetUIText("InfinityTower_Cond_TotalLevel"), plotData.CondParam[1], plotData.CondParam[2]))
			elseif _cond == GameEnum.InfinityTowerCond.BountyLevelSpecific then
				NovaAPI.SetTMPText(plot_item_LockMsg, orderedFormat(ConfigTable.GetUIText("InfinityTower_Cond_LevelSpecific"), plotData.CondParam[1]))
			end
		end
	end
end
function InfinityTowerPlot:OnBtnClick_Close()
	local ClosePanel = function()
		self._mapNode.goPlot.gameObject:SetActive(false)
		self.gameObject:SetActive(false)
		self.AniRoot.enabled = false
	end
	self:AddTimer(1, 0.12, ClosePanel, true, true)
	self.AniRoot:Play("MatList_out")
end
function InfinityTowerPlot:ShowGoPlotPanel(plotData)
	self.SelectPlotData = plotData
	local isGet = PlayerData.InfinityTower:GetPlotGetReward(plotData.Id)
	if isGet then
		self._mapNode.goRewardInfo:SetActive(false)
	else
		self:SetPngSprite(self._mapNode.imgGoPlotReward, ConfigTable.GetData_Item(plotData.RewardItemId).Icon2)
		NovaAPI.SetTMPText(self._mapNode.txtGoPlotRewardCount, "×" .. plotData.RewardItemQty)
		self._mapNode.goRewardInfo:SetActive(true)
	end
	NovaAPI.SetTMPText(self._mapNode.goPlotLvNum, plotData.Name)
	NovaAPI.SetTMPText(self._mapNode.goPlotLvName, plotData.Desc)
	NovaAPI.SetTMPText(self._mapNode.goPlotLvDes, plotData.PlotSum)
	self._mapNode.goPlotRoot.gameObject:SetActive(true)
	self._mapNode.goPlotRootMask.gameObject:SetActive(true)
	self._mapNode.rtWindowAni:Play("t_window_04_t_in")
end
function InfinityTowerPlot:OnBtn_ClickPlayPlot()
	PlayerData.InfinityTower:PlayPlot(self.SelectPlotData.Id)
	self:OnBtn_ClickCloseGoPlotPanel()
end
function InfinityTowerPlot:OnBtn_ClickCloseGoPlotPanel()
	self._mapNode.goPlotRootMask.gameObject:SetActive(false)
	self._mapNode.rtWindowAni:Play("t_window_04_t_out")
	self:AddTimer(1, 0.3, function()
		self._mapNode.goPlotRoot:SetActive(false)
	end, true, true, true)
end
return InfinityTowerPlot
