--每日签到
local Util = require("common.Util")
local Msg = require("core.Msg")
local ObjHuman = require("core.ObjHuman")
local LoginSignExcel = require("excel.loginSign")
local ItemExcel = require("excel.item")
local BagLogic = require("bag.BagLogic")
local Grid = require("bag.Grid")
local YunYingLogic = require("yunying.YunYingLogic")
local PanelDefine = require("broadcast.PanelDefine")
local GuideLogic = require("guide.GuideLogic")

SIGN_DAY = 31

STATUS_TYPE1 = 1   -- 已签到可领取
STATUS_TYPE2 = 2   -- 可以充值签到
STATUS_TYPE3 = 3   -- 充值后可领取
STATUS_TYPE4 = 4   -- 不能领取

function updateGM(human, day)
    local now = os.time()
    human.db.signIn = {startTime = now,upTime = now,status = {},cnt = 1}
    human.db.signIn.startTime = human.db.signIn.startTime - 24 * 60 * 60 * day 
    human.db.signIn.cnt =  day
    
end

local function checkDB(human)
    local now = os.time()
    human.db.signIn = human.db.signIn or {startTime = now,upTime = now,status = {},cnt = 1}
    local signInDB = human.db.signIn
    if not Util.isSameDay(signInDB.upTime) then
        signInDB.cnt = signInDB.cnt + 1
        signInDB.upTime = now
        print("  signInDB.cnt   ", signInDB.cnt )
        if signInDB.cnt > SIGN_DAY then
            human.db.signIn = {startTime = now,upTime = now,status = {},cnt = 1}
        else
            print("  not  signInDB.cnt   ", signInDB.cnt )
        end
    end
end

local function checkBuy(human)
    if (human.db.topupAcountDaily or 0) > 0 then
        return 1
    else
        return 0
    end
end

local function getState(day,signInDB,buyToday)
    if signInDB.cnt < day then
        return 0
    end

    if not signInDB.status[day] then
        return STATUS_TYPE1
    end

    if signInDB.status[day] == 1 and buyToday ~= 1 and signInDB.cnt == day then
        return STATUS_TYPE2
    end

    if signInDB.status[day] == 1 and buyToday == 1 and signInDB.cnt == day then
       return STATUS_TYPE3
    end

    return STATUS_TYPE4 
end

local function getConfig(human)
    return LoginSignExcel.firstMonth
end

function query(human)
    -- 初始化数据库数据
    checkDB(human)
    local signInDB = human.db.signIn
    local msgRet = Msg.gc.GC_LOGIN_SIGN_QUERY
    local now = os.time()
    local time = Util.getDayStartTime()
    msgRet.nextTime = time + 24 * 60 * 60 - now
    msgRet.curCnt = signInDB.cnt
    msgRet.maxCnt = SIGN_DAY
    msgRet.actID = 1
    local len = 0
    local buyToday = checkBuy(human)

    local config = getConfig(human)
    for k,v in ipairs(config) do
        len = len + 1
        local net = msgRet.list[len]
        net.state = getState(k,signInDB,buyToday)
        Grid.makeItem(net.item,v.rewardID,v.cnt)
    end
    msgRet.list[0] = len

    Msg.send(msgRet,human.fd)
end

-- 发放物品
function getReward(human,day)
    checkDB(human)
    local signInDB = human.db.signIn
    local buyToday = checkBuy(human)
    local state = getState(day,signInDB,buyToday)
    if state == 0 or state == STATUS_TYPE4 or state == STATUS_TYPE2 then 
        return
    end

    local config = getConfig(human)

    local itemID = nil
    local itemCnt = nil

    itemID = config[day].rewardID
    itemCnt = config[day].cnt

    -- 改db
    signInDB.status[day] = signInDB.status[day] or 0
    signInDB.status[day] = signInDB.status[day] + 1
    BagLogic.cleanMomentItemList()
	BagLogic.updateMomentItem(1, itemID, itemCnt)
	BagLogic.addMomentItemList(human, "signInReward")
    query(human)
    
    for k, v in pairs(funcID) do
        YunYingLogic.updateIcon(YYInfo[k], human)
        YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3502)
        break
    end
    GuideLogic.setDoSpecialGuide(human, GuideLogic.SKIPTYPE_JUMP_LOGINSIGN)
end

function isRed(human)
    checkDB(human)
    local signInDB = human.db.signIn
    local buyToday = checkBuy(human)
    local config = getConfig(human)
    for k,v in ipairs(config) do
        local state = getState(k,signInDB,buyToday)
        if state == STATUS_TYPE1 or state == STATUS_TYPE3  then 
            return true
        end
    end
end

function chargeAfter(human)
    for k, v in pairs(funcID) do
        YunYingLogic.updateIcon(YYInfo[k], human)
        YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3502)
        break
    end
end
