local ActBaseData = class("ActBaseData", BaseData)

-- 必须重写 --------------------------------------------------------------------------------------------------------------
function ActBaseData:setActivityInfo()
	Logger.logFatal("不能被调用，必须重写")
end

function ActBaseData:getActNameStr()
	return ""
end

-- 通用逻辑 --------------------------------------------------------------------------------------------------------------

function ActBaseData:initActInfo(data)
	if self.actId ~= data.actId then
		self:tryResetGift(true)
		self:tryResetProBought()
		self:clear()
	end

	self.actId = data.actId
	self.startTime = data.startTime
	self.endTime = data.endTime
	self.extraTime = data.extraTime
end

function ActBaseData:getActId()
	return self.actId
end

function ActBaseData:setActId(id)
	self.actId = id
end

function ActBaseData:clearActId()
	self:setActId(nil)
end

function ActBaseData:getStartTime()
	return self.startTime
end

function ActBaseData:getEndTime()
	return self.endTime
end

function ActBaseData:getExtraTime()
	return self.extraTime
end

function ActBaseData:getRemainTime()
	if not self:getStartTime() then
		return 0
	end

	local nowTime = Time:getServerTime()
	if self:getExtraTime() < nowTime then
		return 0
	end

	return self:getExtraTime() - nowTime
end

function ActBaseData:getNormalRemainTime()
	local nowTime = Time:getServerTime()
	if self:getEndTime() < nowTime then
		return 0
	end

	return self:getEndTime() - nowTime
end

function ActBaseData:getTotalRemainTime()
	local remainTime = self:getNormalRemainTime()
	if remainTime <= 0 then
		remainTime = self:getRemainTime()
	end

	return remainTime
end

function ActBaseData:getIsLastDay()
	if not self:getStartTime() then
		return false
	end

	local nowTime = Time:getServerTime()
	if self:getExtraTime() > nowTime and nowTime >= self:getEndTime() then
		return true
	end

	return false
end

function ActBaseData:getActivityDay()
	local time = Time:getDayBeginTimeStamp(self:getStartTime())
	return (Time:getServerTime() - time) // GConst.SECONDS_PRE_DAY + 1
end

function ActBaseData:getTimeOpen()
	if not self:getStartTime() then
		return false
	end

	local nowTime = Time:getServerTime()
	if self:getStartTime() <= nowTime and nowTime <= self:getExtraTime() then
		return true
	end

	return false
end

function ActBaseData:getIsOpen()
	if GFunc.isShenhe() then
        return false
    end

	if not ModuleManager:getIsOpen(DataManager.ActivityData:getActOpenKey(), true) then
		return false
	end

	local actId = self:getActId()
	if not actId or actId <= 0 then
		return false
	end

	return self:getTimeOpen()
end

function ActBaseData:setLoginRp()
	self.loginRp = true
end

function ActBaseData:getLoginRp()
    if DataManager.PaymentData:getIsSkipAd() then
		return true
	end
	return not self.loginRp
end

-- 重置礼包购买次数
-- force true重置所有礼包 false只重置免费礼包 
function ActBaseData:tryResetGift(force)
	local actId = self:getActId()
	if not actId or actId <= 0 then
		return
	end
	if EDITOR_MODE then
		Logger.logHighlight("重置活动礼包数据 act_id = " .. tostring(actId))
	end

	DataManager.ActGiftData:tryResetGift(actId, force)
end

function ActBaseData:tryResetProBought()
	local actId = self:getActId()
	if not actId or actId <= 0 then
		return
	end
	if EDITOR_MODE then
		Logger.logHighlight("重置活动战令数据 act_id = " .. tostring(actId))
		Logger.logHighlight("重置轮次数据 act_id = " .. tostring(actId))
	end

	DataManager.ActBountyData:tryResetProBought(actId)
	DataManager.ActRoundTaskData:tryResetProBought(actId)
end




-- 今日已买次数
function ActBaseData:getTodayExchangeCount(id)
	return DataManager.ActivityData:getExchangeCount(id)
end


return ActBaseData