------------------------------------------------
--作者: 杨全福
--日期: 2021-10-26
--文件: LuckCatBYData.lua
--模块: LuckCatBYData
--描述:  绑玉招财猫活动数据
------------------------------------------------
local BaseData = require("Logic.YYHD.YYHDBaseData")

local LuckCatBYData = {
    --倍率列表,总共8个
    RateList = nil,
    --次数对应消耗和充值
    GearList = nil,
    --抽奖记录列表
    RecordList = nil,
    --抽奖剩余次数
    RemainCount = 0,
    --当前充值金额
    RechargeCount = 0,

    --当前消耗元宝
    CurCost = 0,
    --到下一档的金额
    NextNeed = 0,
    --到下一档增加的次数
    NextAddCount = 0,
    --当前已经抽了的次数
    CostCountTable = nil,

    --当前限制次数
    CurLimitCount = 0,
    --当前已抽次数
    CurCostCount = 0,
    --显示上线红点
    ShowOnlineRedPoint = false,
}

function LuckCatBYData:New(typeId)
    local _n = Utils.DeepCopy(self)
    local _mn = setmetatable(_n, {__index = BaseData:New(typeId)})
    return _mn
end

--解析活动配置数据
function LuckCatBYData:ParseSelfCfgData(jsonTable)
    self.ShowOnlineRedPoint = true
    self.RateList = List:New()
    if jsonTable.rate ~= nil then
        local _rateParams = Utils.SplitNumber(jsonTable.rate, '_')
        for i = 1, #_rateParams do
            self.RateList:Add(_rateParams[i])
        end

        --补充到8个
        local _rateCount = #self.RateList
        if _rateCount < 8 then
            local _addRate = 1
            if _rateCount > 0 then
                _addRate = self.RateList[_rateCount]
            end
            for i = _rateCount + 1, 8 do
                self.RateList:Add(_addRate)
            end
        end
    end
    self.GearList = List:New()
    if jsonTable.gear ~= nil then
        local _gearParams = Utils.SplitStrByTableS(jsonTable.gear, {';', '_'})
        for i = 1, #_gearParams do
            local _limit = _gearParams[i][5]
            if _limit == nil then
                _limit = 0
            end
            self.GearList:Add({
                Cost = _gearParams[i][1],   --Cost消耗元宝
                Need = _gearParams[i][2],    --Need需求充值金额
                Limit = _limit,
            })
        end
    end
end

--解析活动玩家数据
function LuckCatBYData:ParsePlayerData(jsonTable)
    self.RecordList = List:New()
    if jsonTable.record ~= nil then
        local _recordParams = Utils.SplitStrBySeps(jsonTable.record, {';', '_'})
        for i = 1, #_recordParams do
            self.RecordList:Add({
                Name = _recordParams[i][1],     --Name玩家名字
                Rate = tonumber(_recordParams[i][2]) / 100, --Rate中奖倍数
                Count = tonumber(_recordParams[i][3])--Count中奖数量
            })
        end
    end
    self.RemainCount = jsonTable.num or 0
    self.RechargeCount = jsonTable.rechargeCount or 0
    self.CostCountTable = {}
    if jsonTable.serverDrawMap ~= nil then
        for k, v in pairs(jsonTable.serverDrawMap) do
            self.CostCountTable[tonumber(k)] = tonumber(v)
        end
    end
end

--刷新数据
function LuckCatBYData:RefreshData()
    --计算当前可抽总次数
    local _allCount = 0
    for i = 1, #self.GearList do
        if self.RechargeCount >= self.GearList[i].Need then
            _allCount = i
        end
    end
    local _curCount = _allCount - self.RemainCount + 1
    --防错
    if _curCount <= 0 or _curCount > #self.GearList then
        self.CurCost = 0
        self.NextNeed = 0
        self.NextAddCount = 0
        self.CurLimitCount = 0
        self.CurCostCount = 0
    else
        local _curCfg = self.GearList[_curCount]
        self.CurLimitCount = _curCfg.Limit
        self.CurCostCount = self.CostCountTable[_curCfg.Need]
        if self.CurCostCount == nil then
            self.CurCostCount = 0
        end
        self.CurCost = _curCfg.Cost
        self.NextNeed = 0
        if _allCount < #self.GearList then
            local _nextNeed = self.GearList[_allCount + 1].Need
            --计算再冲多少钱可以增加次数
            self.NextNeed = _nextNeed - self.RechargeCount
            --计算下次充值可增加的抽奖次数
            local _nextCount = 0
            for i = 1, #self.GearList do
                if _nextNeed >= self.GearList[i].Need then
                    _nextCount = i
                end
            end
            self.NextAddCount = _nextCount - _allCount
        end
    end
    self:CheckRedPoint()
end

--检查红点
function LuckCatBYData:CheckRedPoint()
    self:RemoveRedPoint(nil)
    if self.RemainCount > 0 and self.CurCostCount < self.CurLimitCount then
        self:AddRedPoint(0, nil, nil, nil, true, nil)
    end
    if self.ShowOnlineRedPoint then
        self:AddRedPoint(1, nil, nil, nil, true, nil)
    end
end

--清除上线红点
function LuckCatBYData:ClearOnlineRedPoint()
    if self.ShowOnlineRedPoint then
        self.ShowOnlineRedPoint = false
        self:CheckRedPoint()
    end
end

--增加主角中奖记录
function LuckCatBYData:AddLocalRecord(rate, count)
    --剩余次数减1
    self.RemainCount = self.RemainCount - 1
    local _lp = GameCenter.GameSceneSystem:GetLocalPlayer()
    if _lp == nil then
        return
    end
    self.RecordList:Insert({
        Name = _lp.Name,     --Name玩家名字
        Rate = tonumber(rate) / 100, --Rate中奖倍数
        Count = tonumber(count)--Count中奖数量
    }, 1)
end

--发送抽奖请求
function LuckCatBYData:ReqChouJiang()
    if self.RemainCount <= 0 or self.CurCostCount >= self.CurLimitCount then
        Utils.ShowPromptByEnum("C_LUCKCAT_COUNT_NOTENOUGH")
        return
    end
    local _haveGold = GameCenter.ItemContianerSystem:GetEconomyWithType(ItemTypeCode.BindGold)
    if _haveGold < self.CurCost then
        Utils.ShowPromptByEnum("C_LUCKCAT_BANGYU_NOTENOUGH")
        return
    end
    GameCenter.Network.Send("MSG_Activity.ReqActivityDeal", {type = self.TypeId})
end

--处理运营活动返回
function LuckCatBYData:ResActivityDeal(jsonTable)
    self:AddLocalRecord(jsonTable.rate, jsonTable.money)
    if jsonTable.serverDrawMap ~= nil then
        for k, v in pairs(jsonTable.serverDrawMap) do
            self.CostCountTable[tonumber(k)] = tonumber(v)
        end
    end
    self:RefreshData()
    GameCenter.PushFixEvent(LogicLuaEventDefine.EID_REFRESH_LUCKCAT_RESULT, jsonTable)
    GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_REFRESH_HDLIST)
end

return LuckCatBYData