local Log = require("common.Log")
local Lang = require("common.Lang")
local Json = require("common.Json")
local Msg = require("core.Msg")
local Timer = require("core.Timer")
local Util = require("common.Util")
local ChatBan = require("chat.ChatBan")
local ChatRecord = require("chat.ChatRecord")
local Broadcast = require("broadcast.Broadcast")
local ChatLogic = require("chat.ChatLogic")
local CombatVideo = require("combat.CombatVideo")
local Define = require("platform.Define")
local HeroExcel = require("excel.hero")
local RoleLogic = require("role.RoleLogic")
local CharRecord = require("chat.ChatRecord")
local MiddleCommonLogic = require("middle.MiddleCommonLogic")
local ChatUnion = require("chat.ChatUnion")
local Config = require("Config")

-- 聊天频道
CHAT_TYPE_WORLD         = 1	    --世界
CHAT_TYPE_SYSTEM        = 2 	--系统
CHAT_TYPE_UNION	        = 3 	--工会
CHAT_TYPE_FRIEND        = 4 	--好友私聊
CHAT_TYPE_MIDDLE        = 5 	--跨服
CHAT_TYPE_WARZONE		= 6		--战区

CHAT_TYPE_CNT = 6           --聊天频道数

-- isJson值
CHAT_NORMAL         = 0         -- 普通聊天 
CHAT_UNION_FIGHT    = 1         -- 公会战
CHAT_UNION_ECTYPE   = 2         -- 公会副本
CHAT_UNION_RED_BAG  = 3         -- 公会红包
CHAT_UNION_ZHAOMU   = 4         -- 公会招募
CHAT_UNION_AB_HATHER  = 8		-- 公会异界之战集结50

CHAT_HERO_SHARE     = 5         -- 英雄聊天分享
CHAT_FIGHT_SHARE    = 6         -- 战斗记录聊天分享
CHAT_ITEM_SHARE     = 7         -- 道具聊天分享
                      
CHAT_SHARE_TYPE     = 1         -- 战报分享
CHAT_LV_NEED_WORLD        = 25	    -- 开放聊天等级
CHAT_LV_NEED_MIDDLE        = 70	    -- 开放聊天等级
CHAT_LV_NEED_FRIEND        = 30	    -- 开放聊天等级
CHAT_LV_NEED_WARZONE 	   	= 50	-- 开放聊天等级-战区
CHAT_OPEN_DAY_WARZONE		= 7		-- 开放聊天服务器天数-战区
CHAT_OPEN_DAY_MIDDLE		= 15	-- 开放聊天服务器天数-跨服
CHAT_CD             = 10000		-- 聊天cd时间
CHAT_MSG_LEN        = 90

function chatReport(human, content)
	s2aParam = {}

    s2aParam.role_name = human.db.name
    s2aParam.account_name = human.db.account
    s2aParam.content = content or ""
    s2aParam.ip = human.db.ip
    
	_G.thread_http.send(Define.CHAT_REPORT,Json.Encode(s2aParam))
    -- Log.write(Log.LOGID_DEBUG, "chatReportSuccrss"..Define.CHAT_REPORT) 
end

function CG_CHAT_REPORT(human, msg)
    chatReport(human, msg.content)
end

function CG_CHAT(human, msg)
    local strLen = string.len(msg.msg)
    -- 普通聊天限制字数
    if CHAT_MSG_LEN < strLen and msg.isJson == CHAT_NORMAL then
        return Broadcast.sendErr(human, Lang.CHAT_MSG_LEN_ERR)	
    end
    ChatLogic.chat(human, msg, msg.isJson)
end

function onLogin(human)
    ChatRecord.initHumanChatRead(human)
	ChatBan.sendBanList(human)
end

function CG_CHAT_BAN(human, msg)
	ChatBan.setBan(human, msg.uuid, msg.op)
end

function CG_CHAT_PLAYER_INFO(human, msg)
	local nServerIndex = msg.nServerIndex
	print("[CG_CHAT_PLAYER_INFO] uuid = "..msg.uuid.." nServerIndex = "..nServerIndex)
	if -1 >= nServerIndex or nServerIndex == Config.SVR_INDEX then
		local msgRet = Msg.gc.GC_CHAT_PLAYER_INFO
		if not RoleLogic.makePlayInfo(msgRet.data, msg.uuid) then
			return
		end
		Msg.send(msgRet, human.fd)
	else
		MiddleCommonLogic.MiddleCommonLogic_GetChatPlayInfo_LW(human, msg)
	end
end

function CG_CHAT_HERO_SHARE(human,msg)
	local bagIndex = msg.bagIndex
	local heroGrid = human.db.heroBag[bagIndex]
	if not heroGrid then
		return
	end
	
	local heroConfig = HeroExcel.hero[heroGrid.id]
    if 	heroConfig == nil then
        return 		
	end
    msg.videoUuid = ""
	local flag = ChatLogic.chat(human, msg,CHAT_HERO_SHARE)
    if flag == true then
        Broadcast.sendErr(human, Lang.SHARE_SUCCESS)
    else
        Broadcast.sendErr(human, Lang.SHARE_ERROR)
    end
end

--战斗界面 战斗记录分享
function CG_CHAT_COMBAT_SHARE(human, msg)
	if msg.msgType ~= CHAT_TYPE_WORLD and 
		msg.msgType ~= CHAT_TYPE_UNION and 
		msg.msgType ~= CHAT_TYPE_MIDDLE and msg.msgType ~= CHAT_TYPE_WARZONE then
		return
	end
	
	-- 如果是分享在世界上检测是否在聊天CD 中
	if msg.msgType == CHAT_TYPE_WORLD and human.worldChatTime and human.worldChatTime + CHAT_CD > Timer.now then
		local cdLeftSec = math.ceil((CHAT_CD - (Timer.now - human.worldChatTime))/1000)
		Broadcast.sendDown(human, Util.format(Lang.CHAT_TIME_SHORT, cdLeftSec))
		return
	end
    
	if msg.msgType == CHAT_TYPE_UNION and human.db.unionUuid == nil then
		return Broadcast.sendErr(human, Lang.UNION_PLAYER_IN_NO)
	end
    local content = {}
    content.msg = msg.msg
    content.msgType = msg.msgType
    if msg.shareType ~= CHAT_SHARE_TYPE then
        local combatInfo = Util.copyTable(human.combat)	
	    if combatInfo == nil then
	    	return
	    end	 
    

	    local videoUuid = human.combat.videoUuid
	    if not videoUuid then
	    	videoUuid = CombatVideo.saveCombatVideo(human, true)		
	    end	

	    if not videoUuid then 
	    	return Broadcast.sendErr(human, Lang.SHARE_ERROR)
	    end
        
        content.videoUuid = videoUuid
    end
	local flag = ChatLogic.chat(human,content,CHAT_FIGHT_SHARE)
    if flag == true then
        Broadcast.sendErr(human, Lang.SHARE_SUCCESS)
    else
        Broadcast.sendErr(human, Lang.SHARE_ERROR)
    end
end

function CG_CHAT_COMPLAIN_PLAYER(human,msg) 
    ChatBan.jubaoChat(human,msg)
end

-- 获取聊天记录
function CG_CHAT_RECORD_QUERY(human,msg)
    CharRecord.getChatRecord(human,msg.msgType)
end

-- 获取私聊列表
function CG_CHAT_FRIEND_RECORD_QUERY(human)
    CharRecord.getChatFriendList(human)
end

--根据uuid获取私聊记录
function CG_CHAT_FRIEND_RECORD_BY_FRIEND(human,msg)
    CharRecord.getChatFriendRecord(human,msg.uuid)
end

-- 新增私聊
function CG_CHAT_FRIEND_RECORD_ADD(human,msg)
    CharRecord.addFriendChat(human,msg.uuid)
end

-- 删除玩家私聊数据
function CG_CHAT_FRIEND_RECORD_DEL(human,msg)
    CharRecord.delFriendChatRecord(human,msg.uuid)
end

function CG_CHAT_AB_GATHER(human,msg)
	ChatUnion.chatUnionGather(human, msg.str)
end
