local Lang = require("common.Lang")
local Util = require("common.Util")
local CommonDB = require("common.CommonDB")
local InnerMsg = require("core.InnerMsg")
local MiddleManager = require("middle.MiddleManager")
local MiddleLogic = require("middle.MiddleLogic")
local MiddleConnect = require("middle.MiddleConnect")

LAST_HEARTBEAT_TIME = LAST_HEARTBEAT_TIME or nil -- 上次收到心跳包的時間
LAST_SEND_HB_TS = LAST_SEND_HB_TS or nil -- 上次發送心跳包的時間

--定时发心跳30秒1次
function heartbeat()
    if _G.is_middle == true then return end

    if MiddleConnect.IS_MIDDLE_CONNECT ~= true then return end

    local now = os.time()
    if LAST_SEND_HB_TS == nil or now - LAST_SEND_HB_TS >= 30 then
        LAST_SEND_HB_TS = now
    
        -- logic连middle 所以logic向middle发心跳
        local msg = InnerMsg.lw.LW_HEARTBEAT
        
        msg.svrIndexData = msg.svrIndexData or {}
        Util.cleanTable(msg.svrIndexData)
        
        local mergeSvrIndexTb = CommonDB.getMergeSvrIndex()
        if mergeSvrIndexTb and mergeSvrIndexTb[1] then
            for i = 1, #mergeSvrIndexTb do
                msg.svrIndexData[i] = mergeSvrIndexTb[i]
            end
        end

        InnerMsg.sendMsg(0, msg)   
    end
end


function LW_HEARTBEAT(fd, msg)
    --print("LW_HEARTBEAT", msg.svrIndexData)

    MiddleManager.onHeartbeat(fd, msg.svrIndexData)

    msg = InnerMsg.wl.WL_HEARTBEAT
    InnerMsg.sendMsg(fd, msg)  
end

function WL_HEARTBEAT(fd, msg)
    LAST_HEARTBEAT_TIME = os.time()
end

-- 设置开服时间
function LW_OS(fd, msg)
	local value = msg.value
	if value == nil then
		local openSvrTime = CommonDB.getServerOpenTime()
		if openSvrTime == 0 then
			MiddleLogic.sendWLBroadcast(fd, msg.uuid, Lang.DRILL_NOT_SET_OPEN_TIME)
		else
			local tb = os.date("%Y%m%d", openSvrTime)
			MiddleLogic.sendWLBroadcast(fd, msg.uuid, Lang.DRILL_CUR_TIME..tb)
		end
	else
		local now = os.time()
		local temp = Util.getDayStartTime(now)
		temp = temp - (value - 1) * 24 * 3600
	
		CommonDB.setServerOpenTime(temp)
		
		local tb = os.date("%Y%m%d", temp)
        MiddleLogic.sendWLBroadcast(fd, msg.uuid, Lang.DRILL_CUR_TIME..tb)
	end	
end

