local AutoBattleCtrl = class("AutoBattleCtrl", BaseCtrl)
local LocalData = require("GameCore.Data.LocalData")
local AdventureModuleHelper = CS.AdventureModuleHelper
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
AutoBattleCtrl._mapNodeConfig = {
	btnAutoBattleOpen = {
		sComponentName = "NaviButton",
		callback = "OnClick_AutoBattleOpen",
		sAction = "AutoBattle"
	},
	btnAutoBattleClose = {
		sComponentName = "NaviButton",
		callback = "OnClick_AutoBattleClose",
		sAction = "AutoBattle"
	},
	txtBtnAutoBattleOpen = {
		nCount = 4,
		sComponentName = "TMP_Text",
		sLanguageId = "AutoBattle_Open"
	},
	txtBtnAutoBattleClose = {
		nCount = 4,
		sComponentName = "TMP_Text",
		sLanguageId = "AutoBattle_Close"
	},
	TMPSemiBattleHint = {
		sComponentName = "TMP_Text",
		sLanguageId = "AutoBattle_Hint"
	},
	rtAutoBattleHint = {}
}
AutoBattleCtrl._mapEventConfig = {
	LoadLevelRefresh = "Reset",
	InputEnable = "OnEvent_InputEnable",
	UpdateAutoCastUltimateSkill = "UpdateAutoCastUltimateSkill",
	ShowOrHideBattleDash = "OnEvent_ShowOrHideAutoBattle"
}
function AutoBattleCtrl:Awake()
	self.nType = GameEnum.worldLevelType.Mainline
	self.bAuto = false
	self.animator = self.gameObject:GetComponent("Animator")
	self._mapNode.btnAutoBattleOpen.gameObject:SetActive(true)
	self._mapNode.btnAutoBattleClose.gameObject:SetActive(false)
	self._mapNode.rtAutoBattleHint.gameObject:SetActive(false)
	self.animator:Play("AutoBattle_Close")
end
function AutoBattleCtrl:Reset()
	local sKey = "PlayerAutoBattleState" .. self.nType
	local sData = LocalData.GetPlayerLocalData(sKey)
	local nState = tonumber(sData == nil and "0" or sData)
	self.bAuto = nState == 1
	if self.nType == GameEnum.worldLevelType.Dynamic and self.nSubType == GameEnum.dynamicLevelType.Tutorial then
		self.bAuto = false
	end
	self._mapNode.btnAutoBattleOpen.gameObject:SetActive(not self.bAuto)
	self._mapNode.btnAutoBattleClose.gameObject:SetActive(self.bAuto)
	self._mapNode.rtAutoBattleHint.gameObject:SetActive(self.bAuto and self.nType ~= GameEnum.worldLevelType.Mainline)
	if self.bAuto then
		self.animator:Play("AutoBattle_Open")
	else
		self.animator:Play("AutoBattle_Close")
	end
	CS.AdventureModuleHelper.SetSemiAutoBattleMode(self.bAuto)
	self:UpdateAutoCastUltimateSkill()
	if self.nType == GameEnum.worldLevelType.StarTower then
		EventManager.Hit("Guide_PassiveCheck_Msg", "Guide_AutoBattleOpen")
	end
end
function AutoBattleCtrl:OnEnable()
	GamepadUIManager.AddGamepadUINode("BattleMenu", self:GetGamepadUINode())
end
function AutoBattleCtrl:SetBattleType(nType, nSubType)
	self.nType = nType
	self.nSubType = nSubType
	if self.nType == GameEnum.worldLevelType.PrologueBattleLevel then
		self.gameObject.transform.localScale = Vector3.zero
	elseif self.nType == GameEnum.worldLevelType.Dynamic and self.nSubType == GameEnum.dynamicLevelType.Tutorial then
		self.gameObject.transform.localScale = Vector3.zero
	end
end
function AutoBattleCtrl:UpdateAutoCastUltimateSkill()
	local bAutoUlt = CS.UIGameSystemSetup.Instance.EnableAutoUlt
	CS.AdventureModuleHelper.SetAutoCastUltimateSkill(bAutoUlt)
end
function AutoBattleCtrl:OpenUI()
end
function AutoBattleCtrl:CloseUI()
end
function AutoBattleCtrl:OnDisable()
end
function AutoBattleCtrl:OnDestroy()
end
function AutoBattleCtrl:OnClick_AutoBattleOpen()
	self.bAuto = true
	self._mapNode.btnAutoBattleOpen.gameObject:SetActive(false)
	self._mapNode.btnAutoBattleClose.gameObject:SetActive(true)
	self._mapNode.rtAutoBattleHint.gameObject:SetActive(self.nType ~= GameEnum.worldLevelType.Mainline)
	CS.AdventureModuleHelper.SetSemiAutoBattleMode(true)
	local sKey = "PlayerAutoBattleState" .. self.nType
	LocalData.SetPlayerLocalData(sKey, 1)
	if self.nType == GameEnum.worldLevelType.InfinityTower then
		EventManager.Hit("ChangeAutoBattleState", true)
	end
	self.animator:Play("AutoBattle_Open")
end
function AutoBattleCtrl:OnClick_AutoBattleClose()
	self.bAuto = false
	self._mapNode.btnAutoBattleClose.gameObject:SetActive(false)
	self._mapNode.btnAutoBattleOpen.gameObject:SetActive(true)
	self._mapNode.rtAutoBattleHint.gameObject:SetActive(false)
	CS.AdventureModuleHelper.SetSemiAutoBattleMode(false)
	local sKey = "PlayerAutoBattleState" .. self.nType
	LocalData.SetPlayerLocalData(sKey, 0)
	if self.nType == GameEnum.worldLevelType.InfinityTower then
		EventManager.Hit("ChangeAutoBattleState", false)
	end
	self.animator:Play("AutoBattle_Close")
end
function AutoBattleCtrl:OnEvent_InputEnable(bEnable)
	if self.nType == GameEnum.worldLevelType.PrologueBattleLevel then
		self.gameObject.transform.localScale = Vector3.zero
		self._mapNode.btnAutoBattleOpen.interactable = false
		self._mapNode.btnAutoBattleClose.interactable = false
		return
	elseif self.nType == GameEnum.worldLevelType.Dynamic and self.nSubType == GameEnum.dynamicLevelType.Tutorial then
		self.gameObject.transform.localScale = Vector3.zero
		self._mapNode.btnAutoBattleOpen.interactable = false
		self._mapNode.btnAutoBattleClose.interactable = false
		return
	end
	self.gameObject.transform.localScale = bEnable and Vector3.one or Vector3.zero
	self._mapNode.btnAutoBattleOpen.interactable = bEnable and true or false
	self._mapNode.btnAutoBattleClose.interactable = bEnable and true or false
end
function AutoBattleCtrl:OnEvent_ShowOrHideAutoBattle(isShow)
	self.gameObject.transform.localScale = isShow and Vector3.one or Vector3.zero
	self._mapNode.btnAutoBattleOpen.interactable = isShow and true or false
	self._mapNode.btnAutoBattleClose.interactable = isShow and true or false
end
return AutoBattleCtrl
