local ExchangeCodeCtrl = class("ExchangeCodeCtrl", BaseCtrl)
ExchangeCodeCtrl._mapNodeConfig = {
	txtWindowTitle = {
		sComponentName = "TMP_Text",
		sLanguageId = "Settings_Account_ExchangeCode"
	},
	txtCodeDesc = {
		sComponentName = "TMP_Text",
		sLanguageId = "Settings_Account_CodeTips"
	},
	input = {
		sComponentName = "TMP_InputField"
	},
	btnClose = {sComponentName = "UIButton", callback = "ClosePanel"},
	btnClose1 = {sComponentName = "UIButton", callback = "ClosePanel"},
	btnConfirm2 = {
		sComponentName = "UIButton",
		callback = "OnBtnClick_Confirm"
	},
	txtBtnConfirm = {
		sComponentName = "TMP_Text",
		sLanguageId = "MessageBox_Confirm"
	},
	animator = {
		sNodeName = "---Exchange---",
		sComponentName = "Animator"
	}
}
ExchangeCodeCtrl._mapEventConfig = {}
function ExchangeCodeCtrl:Refresh()
	NovaAPI.SetTMPInputFieldText(self._mapNode.input, "")
end
function ExchangeCodeCtrl:PlayInAni()
	self.gameObject:SetActive(true)
	self._mapNode.animator:Play("t_window_04_t_in")
	EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function ExchangeCodeCtrl:PlayOutAni(callback)
	self._mapNode.animator:Play("t_window_04_t_out")
	self:AddTimer(1, 0.2, callback, true, true, true)
end
function ExchangeCodeCtrl:ClosePanel()
	local cb = function()
		EventManager.Hit(EventId.ClosePanel, PanelId.ExchangeCodePanel)
	end
	self:PlayOutAni(cb)
end
function ExchangeCodeCtrl:FilterCharacters(text)
	local filtered = string.gsub(text, "[^%w]", "")
	filtered = string.upper(filtered)
	if filtered ~= text then
		NovaAPI.SetTMPInputFieldText(self._mapNode.input, filtered)
	end
end
function ExchangeCodeCtrl:Awake()
	self:Refresh()
	self:PlayInAni()
end
function ExchangeCodeCtrl:OnEnable()
	self._mapNode.input.onValueChanged:AddListener(function(text)
		self:FilterCharacters(text)
	end)
end
function ExchangeCodeCtrl:OnDisable()
	self._mapNode.input.onValueChanged:RemoveListener(function(text)
		self:FilterCharacters(text)
	end)
end
function ExchangeCodeCtrl:OnDestroy()
end
function ExchangeCodeCtrl:OnBtnClick_Confirm(btn)
	local callback = function(changeInfo)
		UTILS.OpenReceiveByChangeInfo(changeInfo, function()
			self:ClosePanel()
		end)
	end
	local sCode = NovaAPI.GetTMPInputFieldText(self._mapNode.input)
	PlayerData.Base:SendPlayerRedeemCodeReq(sCode, callback)
end
return ExchangeCodeCtrl
