local JointDrillRaidCtrl = class("JointDrillRaidCtrl", BaseCtrl)
JointDrillRaidCtrl._mapNodeConfig = {
	goBlur = {
		sNodeName = "t_fullscreen_blur_blue"
	},
	btnBgClose = {
		sComponentName = "Button",
		callback = "OnBtnClick_Close"
	},
	animWindow = {
		sNodeName = "---RaidCount---",
		sComponentName = "Animator"
	},
	txtWindowTitle = {
		sComponentName = "TMP_Text",
		sLanguageId = "Raid_Title_Raid"
	},
	btnClose = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_Close"
	},
	txtRaidCountCn = {
		sComponentName = "TMP_Text",
		sLanguageId = "Raid_RaidCount"
	},
	txtRaidCount = {sComponentName = "TMP_Text"},
	txtRaidTip = {
		sComponentName = "TMP_Text",
		sLanguageId = "JointDrill_Fast_Battle_Tip_Text"
	},
	imgEnergy = {sComponentName = "Image"},
	txtEnergyCount = {sComponentName = "TMP_Text"},
	Slider = {
		sComponentName = "Slider",
		callback = "OnValueChange_Slider"
	},
	btnReduce = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_Reduce"
	},
	btnAdd = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_Add"
	},
	btnGrayAdd = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_MaxGray"
	},
	btnGrayReduce = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_MinGray"
	},
	btnConfirm1 = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_Confirm"
	},
	txtBtnConfirm = {
		sComponentName = "TMP_Text",
		sLanguageId = "Raid_Btn_Raid"
	},
	btnCancel = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_Cancel"
	},
	txtBtnCancel = {
		sComponentName = "TMP_Text",
		sLanguageId = "MessageBox_Cancel"
	}
}
JointDrillRaidCtrl._mapEventConfig = {
	JointDrillRaidSuccess = "OnEvent_JointDrillRaidSuccess"
}
JointDrillRaidCtrl._mapRedDotConfig = {}
function JointDrillRaidCtrl:Refresh()
	local mapItemCfg = ConfigTable.GetData_Item(self.nTicketsId)
	if mapItemCfg ~= nil then
		self:SetPngSprite(self._mapNode.imgEnergy, mapItemCfg.Icon)
	end
	self:RefreshData()
	self:RefreshCount()
	self:RefreshBar()
end
function JointDrillRaidCtrl:RefreshData()
	self.nTicketsCount = PlayerData.Item:GetItemCountByID(self.nTicketsId)
	self.nMaxCount = self.nTicketsCount
	NovaAPI.SetSliderMinValue(self._mapNode.Slider, 1)
	NovaAPI.SetSliderMaxValue(self._mapNode.Slider, self.nMaxCount)
	NovaAPI.SetSliderInteractable(self._mapNode.Slider, self.nMaxCount > 1)
end
function JointDrillRaidCtrl:RefreshCount()
	NovaAPI.SetTMPText(self._mapNode.txtRaidCount, self.nSelectCount)
	NovaAPI.SetTMPText(self._mapNode.txtEnergyCount, self.nSelectCount)
	NovaAPI.SetTMPColor(self._mapNode.txtEnergyCount, self.nTicketsCount < self.nSelectCount and Red_Unable or Blue_Normal)
	self:RefreshAddButton(self.nSelectCount < self.nMaxCount)
	self:RefreshReduceButton(self.nSelectCount > 1)
end
function JointDrillRaidCtrl:RefreshAddButton(bAble)
	self._mapNode.btnGrayAdd.gameObject:SetActive(not bAble)
	self._mapNode.btnAdd.gameObject:SetActive(bAble)
end
function JointDrillRaidCtrl:RefreshReduceButton(bAble)
	self._mapNode.btnGrayReduce.gameObject:SetActive(not bAble)
	self._mapNode.btnReduce.gameObject:SetActive(bAble)
end
function JointDrillRaidCtrl:RefreshBar()
	NovaAPI.SetSliderValue(self._mapNode.Slider, self.nSelectCount)
end
function JointDrillRaidCtrl:PlayOutAni()
	self._mapNode.animWindow:Play("t_window_04_t_out")
	local closeCall = function()
		self:Close()
	end
	self:AddTimer(1, 0.2, closeCall, true, true, true)
	EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function JointDrillRaidCtrl:Close()
	EventManager.Hit(EventId.ClosePanel, PanelId.JointDrillRaid)
end
function JointDrillRaidCtrl:Awake()
end
function JointDrillRaidCtrl:OnEnable()
	local tbParam = self:GetPanelParam()
	if tbParam ~= nil then
		self.nSelectLevelId = tbParam[1]
	end
	self.nSelectCount = 1
	self._mapNode.animWindow.gameObject:SetActive(false)
	self._mapNode.goBlur.gameObject:SetActive(true)
	self._mapNode.btnBgClose.gameObject:SetActive(false)
	local wait = function()
		coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
		self._mapNode.animWindow.gameObject:SetActive(true)
		self._mapNode.btnBgClose.gameObject:SetActive(true)
		self._mapNode.animWindow:Play("t_window_04_t_in")
		self.nTicketsId = ConfigTable.GetConfigNumber("JointDrill_Challenge_Tickets_Id")
		self:Refresh()
		EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
	end
	cs_coroutine.start(wait)
end
function JointDrillRaidCtrl:OnDisable()
end
function JointDrillRaidCtrl:OnDestroy()
end
function JointDrillRaidCtrl:OnRelease()
end
function JointDrillRaidCtrl:OnBtnClick_Cancel(btn)
	self:PlayOutAni()
end
function JointDrillRaidCtrl:OnValueChange_Slider(_, value)
	self.nSelectCount = math.ceil(value)
	self:RefreshCount()
end
function JointDrillRaidCtrl:OnBtnClick_Add(btn)
	local nRemain = self.nMaxCount - self.nSelectCount
	if nRemain <= 0 then
		return
	end
	if btn.Operate_Type == 0 then
		self.nSelectCount = self.nSelectCount + 1
	elseif btn.Operate_Type == 3 then
		local nAdd = 2 ^ btn.CurrentGear
		local nAfterRemain = nRemain - nAdd
		if nAfterRemain < 0 then
			nAdd = nRemain
		end
		self.nSelectCount = math.floor(self.nSelectCount + nAdd)
	end
	self:RefreshCount()
	self:RefreshBar()
end
function JointDrillRaidCtrl:OnBtnClick_Reduce(btn)
	if self.nSelectCount <= 1 then
		return
	end
	if btn.Operate_Type == 0 then
		self.nSelectCount = self.nSelectCount - 1
	elseif btn.Operate_Type == 3 then
		self.nSelectCount = math.floor(self.nSelectCount - 2 ^ btn.CurrentGear)
	end
	if self.nSelectCount < 1 then
		self.nSelectCount = 1
	end
	self:RefreshCount()
	self:RefreshBar()
end
function JointDrillRaidCtrl:OnBtnClick_Confirm(btn)
	if self.nTicketsCount < self.nSelectCount then
		return
	end
	PlayerData.JointDrill:SendJointDrillSweepMsg(self.nSelectLevelId, self.nSelectCount)
end
function JointDrillRaidCtrl:OnBtnClick_MinGray()
	EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Crafting_Count_Min"))
end
function JointDrillRaidCtrl:OnBtnClick_MaxGray()
	EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Crafting_Count_Max"))
end
function JointDrillRaidCtrl:OnBtnClick_Close()
	self:PlayOutAni()
end
function JointDrillRaidCtrl:OnEvent_JointDrillRaidSuccess()
	EventManager.Hit(EventId.ClosePanel, PanelId.JointDrillRaid)
end
return JointDrillRaidCtrl
