local GachaHistotyCtrl = class("GachaHistotyCtrl", BaseCtrl)
GachaHistotyCtrl._mapNodeConfig = {
	txtWindowTitle = {
		sComponentName = "TMP_Text",
		sLanguageId = "Recruit_history"
	},
	TMPDesc = {
		sComponentName = "TMP_Text",
		sLanguageId = "GachaHistory_Desc"
	},
	DD_PoolSelect = {
		sComponentName = "TMP_Dropdown",
		callback = "OnDD_SelectPool"
	},
	imgBtnPerv = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_PrevPage"
	},
	imgBtnNext = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_NextPage"
	},
	TMPPage = {sComponentName = "TMP_Text"},
	TMPType = {sComponentName = "TMP_Text", nCount = 5},
	TMPName = {sComponentName = "TMP_Text", nCount = 5},
	TMPTag = {sComponentName = "TMP_Text", nCount = 5},
	TMPTime = {sComponentName = "TMP_Text", nCount = 5},
	ImgRare = {sComponentName = "Image", nCount = 5},
	imgTypeIconChar = {nCount = 5},
	imgTypeIconDisc = {nCount = 5},
	btnCloseScreen = {
		sComponentName = "Button",
		callback = "OnBtnClick_Close"
	},
	btnClose = {
		sComponentName = "Button",
		callback = "OnBtnClick_Close"
	},
	rtGachaHistory = {sComponentName = "Animator"},
	imgDDUp = {},
	imgDDDown = {},
	TMPTypeTitle = {
		sNodeName = "TMPType",
		sComponentName = "TMP_Text",
		sLanguageId = "GachaHistory_Type"
	},
	TMPRareTitle = {
		sNodeName = "TMPRare",
		sComponentName = "TMP_Text",
		sLanguageId = "GachaHistory_Rank"
	},
	TMPNameTitle = {
		sNodeName = "TMPNameHistoryTitle",
		sComponentName = "TMP_Text",
		sLanguageId = "GachaHistory_Name"
	},
	TMPTagTitle = {
		sNodeName = "TMPTag",
		sComponentName = "TMP_Text",
		sLanguageId = "GachaHistory_Tag"
	},
	TMPTimeTitle = {
		sNodeName = "TMPTime",
		sComponentName = "TMP_Text",
		sLanguageId = "GachaHistory_Time"
	},
	imgDown = {sComponentName = "Image"},
	imgPrev = {sComponentName = "Image"},
	rtEmpty = {},
	TMPEmpty = {
		sComponentName = "TMP_Text",
		sLanguageId = "Recruit_history_empty"
	},
	txtBtnGuarantee = {
		sComponentName = "TMP_Text",
		sLanguageId = "GachaHistory_Guarantee"
	},
	txtBtnHistory = {
		sComponentName = "TMP_Text",
		sLanguageId = "GachaHistory_History"
	},
	rtContentHistory = {},
	rtGachaGuarantee = {
		sCtrlName = "Game.UI.GachaEx.GachaGuaranteeCtrl"
	},
	btn_Guarantee = {
		sComponentName = "Button",
		callback = "OnBtnClick_Guarantee"
	},
	btn_History = {
		sComponentName = "Button",
		callback = "OnBtnClick_History"
	}
}
GachaHistotyCtrl._mapEventConfig = {
	DropdownOpenState = "OnEvent_Open"
}
function GachaHistotyCtrl:Awake()
	local tbOpenedPool = PlayerData.Gacha:GetOpenedPool()
	self.tbStrogeId = {}
	for _, nPoolId in ipairs(tbOpenedPool) do
		local mapPoolCfgData = ConfigTable.GetData("Gacha", nPoolId)
		if table.indexof(self.tbStrogeId, mapPoolCfgData.StorageId) < 1 and mapPoolCfgData.StorageId ~= GameEnum.gachaStorageType.BeginnerCardPool then
			table.insert(self.tbStrogeId, mapPoolCfgData.StorageId)
		end
	end
	self._mapNode.DD_PoolSelect:ClearOptions()
	local List_String = CS.System.Collections.Generic.List(CS.System.String)
	local lst = List_String()
	for _, value in pairs(self.tbStrogeId) do
		local str = ""
		local mapGachaStorage = ConfigTable.GetData("GachaStorage", value)
		if mapGachaStorage ~= nil then
			str = mapGachaStorage.Name
		end
		lst:Add(str)
	end
	self._mapNode.DD_PoolSelect:AddOptions(lst)
	self._mapNode.DD_PoolSelect.value = 0
end
function GachaHistotyCtrl:FadeIn()
end
function GachaHistotyCtrl:FadeOut()
end
function GachaHistotyCtrl:OnEnable()
end
function GachaHistotyCtrl:OnDisable()
end
function GachaHistotyCtrl:OnDestroy()
end
function GachaHistotyCtrl:OnRelease()
end
function GachaHistotyCtrl:OpenPanel(nStrogeId, nPoolId)
	self.bInit = false
	self._mapNode.rtContentHistory:SetActive(false)
	self._mapNode.rtGachaGuarantee.gameObject:SetActive(true)
	NovaAPI.SetTMPText(self._mapNode.txtWindowTitle, ConfigTable.GetUIText("GachaHistory_Guarantee"))
	for nIdx, value in ipairs(self.tbStrogeId) do
		if value == nStrogeId then
			self._mapNode.DD_PoolSelect.value = nIdx - 1
			break
		end
	end
	self.gameObject:SetActive(true)
	self:Refresh()
	self._mapNode.rtGachaGuarantee:Refresh(nPoolId)
	self._mapNode.rtGachaHistory:Play("t_window_04_t_in")
	self.bInit = true
end
function GachaHistotyCtrl:Refresh()
	local nIdx = self._mapNode.DD_PoolSelect.value + 1
	self.curPool = self.tbStrogeId[nIdx]
	local GetDataCallback = function(tbData)
		self.tbAllHistory = tbData
		self.tbPage = {}
		local nPage = 1
		for i = #self.tbAllHistory, 1, -1 do
			for j = #self.tbAllHistory[i].Ids, 1, -1 do
				if self.tbPage[nPage] == nil then
					self.tbPage[nPage] = {}
				end
				if #self.tbPage[nPage] >= 5 then
					nPage = nPage + 1
					self.tbPage[nPage] = {}
				end
				table.insert(self.tbPage[nPage], {
					self.tbAllHistory[i].Ids[j],
					self.tbAllHistory[i].Time,
					self.tbAllHistory[i].Gid
				})
			end
		end
		self.nTotalPage = nPage
		if self.nTotalPage > 0 then
			NovaAPI.SetTMPText(self._mapNode.TMPPage, string.format("%d/%d", 1, self.nTotalPage))
			self.nCurPage = 1
			self:RefreshPage(self.nCurPage)
		else
			self.nCurPage = 0
			NovaAPI.SetTMPText(self._mapNode.TMPPage, string.format("%d/%d", 0, 0))
			self:RefreshPage(0)
		end
		if #self.tbAllHistory > 0 then
			self._mapNode.rtEmpty:SetActive(false)
			NovaAPI.SetImageColor(self._mapNode.imgPrev, Color(1, 1, 1, 1))
			NovaAPI.SetImageColor(self._mapNode.imgDown, Color(1, 1, 1, 1))
		else
			self._mapNode.rtEmpty:SetActive(true)
			NovaAPI.SetImageColor(self._mapNode.imgPrev, Color(1, 1, 1, 0.7))
			NovaAPI.SetImageColor(self._mapNode.imgDown, Color(1, 1, 1, 0.7))
		end
	end
	PlayerData.Gacha:GetGachaHistory(self.curPool, GetDataCallback)
end
function GachaHistotyCtrl:RefreshPage(nPage)
	local tbPage = self.tbPage[nPage]
	if tbPage == nil then
		for i = 1, 5 do
			NovaAPI.SetTMPText(self._mapNode.TMPType[i], "")
			NovaAPI.SetTMPText(self._mapNode.TMPName[i], "")
			NovaAPI.SetTMPText(self._mapNode.TMPTag[i], "")
			NovaAPI.SetTMPText(self._mapNode.TMPTime[i], "")
			self._mapNode.ImgRare[i].gameObject:SetActive(false)
			self._mapNode.imgTypeIconChar[i].gameObject:SetActive(false)
			self._mapNode.imgTypeIconDisc[i].gameObject:SetActive(false)
		end
		return
	end
	for i = 1, 5 do
		local tbData = tbPage[i]
		if tbData == nil then
			NovaAPI.SetTMPText(self._mapNode.TMPType[i], "")
			NovaAPI.SetTMPText(self._mapNode.TMPName[i], "")
			NovaAPI.SetTMPText(self._mapNode.TMPTag[i], "")
			NovaAPI.SetTMPText(self._mapNode.TMPTime[i], "")
			self._mapNode.ImgRare[i].gameObject:SetActive(false)
			self._mapNode.imgTypeIconChar[i].gameObject:SetActive(false)
			self._mapNode.imgTypeIconDisc[i].gameObject:SetActive(false)
		else
			local mapItemCfgData = ConfigTable.GetData_Item(tbData[1])
			if mapItemCfgData == nil then
				NovaAPI.SetTMPText(self._mapNode.TMPType[i], "")
				NovaAPI.SetTMPText(self._mapNode.TMPName[i], "")
				NovaAPI.SetTMPText(self._mapNode.TMPTag[i], "")
				NovaAPI.SetTMPText(self._mapNode.TMPTime[i], "")
				self._mapNode.ImgRare[i].gameObject:SetActive(false)
				self._mapNode.imgTypeIconChar[i].gameObject:SetActive(false)
				self._mapNode.imgTypeIconDisc[i].gameObject:SetActive(false)
			else
				NovaAPI.SetTMPText(self._mapNode.TMPType[i], mapItemCfgData.Type == GameEnum.itemType.Char and ConfigTable.GetUIText("RoleCn") or ConfigTable.GetUIText("ItemStye_Outfit"))
				self._mapNode.imgTypeIconChar[i].gameObject:SetActive(mapItemCfgData.Type == GameEnum.itemType.Char)
				self._mapNode.imgTypeIconDisc[i].gameObject:SetActive(mapItemCfgData.Type ~= GameEnum.itemType.Char)
				NovaAPI.SetTMPText(self._mapNode.TMPName[i], mapItemCfgData.Title)
				NovaAPI.SetTMPText(self._mapNode.TMPTime[i], os.date("%Y/%m/%d %H:%M", tbData[2]))
				self._mapNode.ImgRare[i].gameObject:SetActive(true)
				self:SetSprite_FrameColor(self._mapNode.ImgRare[i], mapItemCfgData.Rarity, AllEnum.FrameType_New.Text)
				NovaAPI.SetImageNativeSize(self._mapNode.ImgRare[i])
				local mapGacha = ConfigTable.GetData("Gacha", tbData[3])
				if mapGacha ~= nil then
					NovaAPI.SetTMPText(self._mapNode.TMPTag[i], mapGacha.Name)
				else
					NovaAPI.SetTMPText(self._mapNode.TMPTag[i], tbData[3])
				end
			end
		end
	end
end
function GachaHistotyCtrl:OnDD_SelectPool()
	if not self.bInit then
		return
	end
	self:Refresh()
end
function GachaHistotyCtrl:OnEvent_Open(bOpen)
	self._mapNode.imgDDUp:SetActive(bOpen)
	self._mapNode.imgDDDown:SetActive(not bOpen)
	local sSound = bOpen and "ui_common_menu_open" or "ui_common_menu_close"
	CS.WwiseAudioManager.Instance:PlaySound(sSound)
end
function GachaHistotyCtrl:OnBtnClick_NextPage()
	if self.nCurPage >= self.nTotalPage then
		return
	end
	self.nCurPage = self.nCurPage + 1
	NovaAPI.SetTMPText(self._mapNode.TMPPage, string.format("%d/%d", self.nCurPage, self.nTotalPage))
	self:RefreshPage(self.nCurPage)
end
function GachaHistotyCtrl:OnBtnClick_PrevPage()
	if self.nCurPage <= 1 then
		return
	end
	self.nCurPage = self.nCurPage - 1
	NovaAPI.SetTMPText(self._mapNode.TMPPage, string.format("%d/%d", self.nCurPage, self.nTotalPage))
	self:RefreshPage(self.nCurPage)
end
function GachaHistotyCtrl:OnBtnClick_Close()
	local Close = function()
		self.gameObject:SetActive(false)
	end
	self._mapNode.rtGachaHistory:Play("t_window_04_t_out")
	self:AddTimer(1, 0.2, Close, true, true, true)
end
function GachaHistotyCtrl:OnBtnClick_History()
	self._mapNode.rtContentHistory:SetActive(true)
	self._mapNode.rtGachaGuarantee.gameObject:SetActive(false)
	NovaAPI.SetTMPText(self._mapNode.txtWindowTitle, ConfigTable.GetUIText("Recruit_history"))
end
function GachaHistotyCtrl:OnBtnClick_Guarantee()
	self._mapNode.rtContentHistory:SetActive(false)
	self._mapNode.rtGachaGuarantee.gameObject:SetActive(true)
	NovaAPI.SetTMPText(self._mapNode.txtWindowTitle, ConfigTable.GetUIText("GachaHistory_Guarantee"))
end
return GachaHistotyCtrl
