local TutorialConst = require "app/module/tutorial/tutorial_const"

local TUTORIAL_CFG = ConfigManager:getConfig("tutorial")
local TUTORIAL_STARTCFG = ConfigManager:getConfig("tutorial_start")

local TutorialData = class("TutorialData", BaseData)

function TutorialData:ctor()
	self.inTutorial = false
	self.data.tutorialId = 0		-- 强制引导步骤
	self.isFuncTutorial = false
end

function TutorialData:clear()
	self.inTutorial = false
	self.data.tutorialId = 0
	self.isFuncTutorial = false
end

function TutorialData:init(data)
	data = data or {}
	self.inTutorial = false
	-- 功能开启引导列表
	self.funcTutorialMap = {}
	if data.func then
		for id,v in pairs(data.func) do
			self.funcTutorialMap[id] = v
		end
	end
end

function TutorialData:getIsHaveTutorial()
	if self.data.tutorialId > 0 and self.tutorialInfo ~= nil then
		self.isFuncTutorial = false
		return true
	end
	return false
end

function TutorialData:getIsFuncTutorial()
	return self.isFuncTutorial
end

-- 是不是引导的第一步
function TutorialData:getIsInFirstStep()
	return self.data.tutorialId == 10010
end

-- 是否有下一步
function TutorialData:nextTutorial()
	local id = self.tutorialInfo.next_id
	local tutorialInfo = TUTORIAL_CFG[id]
	if tutorialInfo == nil then
		return false
	end
	self.data.tutorialId = id
	self.tutorialInfo = tutorialInfo
	return true
end

function TutorialData:stopTutorial()
	self.inTutorial = false
	self.data.tutorialId = 0
end

-- 当前是否处于引导中
function TutorialData:getIsInTutorial()
	return self.inTutorial
end

-- 开启引导
function TutorialData:setInTutorial(value)
	self.inTutorial = value
end

-- 获取当前引导的id
function TutorialData:getTutorialId()
	return self.data.tutorialId
end

-- 是否显示遮罩
function TutorialData:getShowMask()
	return self.tutorialInfo.show_mask
end

-- 遮罩半径
function TutorialData:getMaskRadius()
	return self.tutorialInfo.circle_r
end

-- 圆形遮罩偏移
function TutorialData:getMaskCircleOffset()
	return self.tutorialInfo.circle_offset
end

-- 遮罩半径尺寸
function TutorialData:getMaskSquareSize()
	return self.tutorialInfo.square_size
end

-- 遮罩坐标偏移
function TutorialData:getMaskSquareOffset()
	return self.tutorialInfo.square_offset
end

-- 获取延迟开始的时间
function TutorialData:getDelayStartTime()
	return self.tutorialInfo.delay or 0
end

-- 是否需要屏蔽点击
function TutorialData:getTouchEnabled()
	return true
end

function TutorialData:getTutorialType()
	return self.tutorialInfo.type
end

function TutorialData:getTutorialStopFight()
	return self.tutorialInfo.stop_fight ~= nil
end

function TutorialData:getTutorialTypeById(id)
	local tutorialInfo = TUTORIAL_CFG[id]
	if tutorialInfo == nil then
		return nil
	end
	return tutorialInfo.type
end

-- 完成条件
function TutorialData:getFinishType()
	return self.tutorialInfo.finish
end

function TutorialData:getFinishTypeById(id)
	local tutorialInfo = TUTORIAL_CFG[id]
	if tutorialInfo == nil then
		return nil
	end
	return tutorialInfo.finish
end

-- 完成条件的参数
function TutorialData:getFinishTypeParams()
	return self.tutorialInfo.finish_parameter
end

-- 引导参数
function TutorialData:getTypeParameter()
	return self.tutorialInfo.type_parameter
end

function TutorialData:getTargetElement()
	return self.tutorialInfo.target_element
end

function TutorialData:getIsHaveTutorialText()
	if self.tutorialInfo.txt and self.tutorialInfo.txt ~= "" then
		return true
	end
	return false
end

function TutorialData:getTutorialText()
	local tutorialInfoTx = I18N:getConfig("tutorial")[self.tutorialInfo.txt]
	if tutorialInfoTx == nil then
		return GConst.EMPTY_STRING
	end
	return tutorialInfoTx.value
end

function TutorialData:getTutorialDirLeft()
	return self.tutorialInfo.txt_direction == 1
end

function TutorialData:getTutorialOffset()
	return self.tutorialInfo.txt_offset
end

function TutorialData:getFingerDir()
	return self.tutorialInfo.arrow_direction or 2
end

function TutorialData:getFingerOffset()
	return self.tutorialInfo.arrow_offset
end

function TutorialData:getTargetName()
	return self.tutorialInfo.target_name
end

function TutorialData:getTargetFuncId()
	return self.tutorialInfo.func_id
end

function TutorialData:getTargetHeroId()
	return self.tutorialInfo.heroid
end

function TutorialData:getTutorialTalkRoleId()
	return self.tutorialInfo.head
end

function TutorialData:getIsHaveFuncTutorial(tutorialId, tutorialInfo)
	-- 说明已经完成了
	if self.funcTutorialMap[tutorialId] then
		return false
	end

	self.tutorialInfo = tutorialInfo
	self.data.tutorialId = tutorialId
	self.isFuncTutorial = true
	return true
end

function TutorialData:markFuncTutorialFinish(id)
	self.funcTutorialMap[id] = true
end

function TutorialData:getIsFuncTutorialFinished(id)
	return self.funcTutorialMap[id] == true
end

function TutorialData:getTutorialIdList()
	if not self.tutorialIdlist then
		self.tutorialIdlist = {}
		self.tutorialIdMap = {}
		self.funcTutorialUImap = {}
		self.tutorialId2UIPath = {}
		for id, info in ipairs(TUTORIAL_STARTCFG) do
			table.insert(self.tutorialIdlist, id)
			self.tutorialIdMap[id] = true
			if info.uires_path then
				if not self.funcTutorialUImap[info.uires_path] then
					self.funcTutorialUImap[info.uires_path] = {}
				end
				table.insert(self.funcTutorialUImap[info.uires_path], id)
			end
			if info.start_id and info.uires_path then
				self.tutorialId2UIPath[info.start_id] = info.uires_path
			end
		end
	end
	return self.tutorialIdlist
end

function TutorialData:getTutorialIdMap(id)
	self:getTutorialIdList()
	return self.tutorialIdMap[id]
end

function TutorialData:getTutorialId2UIPath(id)
	self:getTutorialIdList()
	return self.tutorialId2UIPath[id]
end

return TutorialData