----------------------------------------------------------------------------
--Name:		[征服][基础数据]发奖数据和客户端奖励展示通用
--Creator: 	兰瑞妹
--Created:	2024/04/18
----------------------------------------------------------------------------

-- 命名前缀
-- ClientRewardShow

-- 能展示的奖励类型
-- 1.物品列表(物品ID,物品数量,是否赠,时效,神佑)
-- 2.积分
-- 3.荣誉点
-- 4.赠点(天石)
-- 5.天石
-- 6.金币
-- 7.帮派天石 RewardSynEmoney 特殊类型
--[[
	0 1 3 4320 1 0 0 1
ATTR：flag  = 0
	物品数量：addamount = 1
	是否赠（3代表赠，其他值都是非赠）：monopoly = 3
	时效（分钟）：save_time = 4320
	时效激活：active = 1
		onlinetime = 0
		data = 0
	神佑：reduce_dmg = 1
	]]

-- 奖励表
local tClientRewardShow = {}

-- id从 1000 开始往下 1000 1000 1002 1003
-- 1000 代表功能类型ID 比如消费vip 1000 排行榜 1001 递增+1
-- 10001 代表功能下的次级ID
-- tClientRewardShow[10001] = {}

-- 1000 vip相关内容 1007-1014 vip节日礼包相关
-- 1015 帮派战奖励-帮派排名
-- 1016 帮派战奖励-个人排名

	--邮件奖励
	tClientRewardShow[11201] = {}
	tClientRewardShow[11201]["RewardItem"] = {}
	tClientRewardShow[11201]["RewardItem"][1] = {}
	tClientRewardShow[11201]["RewardItem"][1]["Id"] = 3300366
	tClientRewardShow[11201]["RewardItem"][1]["Attr"] = "0 1"
	tClientRewardShow[11201]["RewardItem"][1]["InstId"] = 11201001
	
----------------------------------逻辑部分---------------------------------------------
-- 服务端使用
-- 外接获取函数 nClientRewardShowId 活动id
function ClientRewardShow_GetData(nClientRewardShowId)
	if nClientRewardShowId == nil then
		Sys_SaveAbnormalLog("函数 ClientRewardShow_GetData 中 [nClientRewardShowId]不能传空值")
		return false
	end
	
	if type(nClientRewardShowId) ~= "number" or nClientRewardShowId%1 ~= 0 or nClientRewardShowId <= 0 then
		Sys_SaveAbnormalLog("函数 ClientRewardShow_GetData 中 [nClientRewardShowId]:[".. nClientRewardShowId .."] 只能传大于0的整数")
		return false
	end
	
	if tClientRewardShow == nil then
		Sys_SaveAbnormalLog("函数 ClientRewardShow_GetData 中 [nClientRewardShowId]:[".. nClientRewardShowId .."] 在表中不存在数据")
		return false
	end
	
	-- 存在表 直接返回当前表
	if tClientRewardShow[nClientRewardShowId] ~= nil then
		return CommonFunc_Copy(tClientRewardShow[nClientRewardShowId])
	end
	
	local tAllReward = nil
	
	local sClientRewardShowId = tostring(nClientRewardShowId)
	
	-- 不存在表 遍历符合条件的所有表 并返回 没有的情况返回nil
	for k,v in pairs(tClientRewardShow) do
		local sKey = tostring(k)
		
		if string.len(sKey) >= string.len(sClientRewardShowId) then
			local sChKey = string.sub(sKey,1,string.len(sClientRewardShowId))
			
			if sClientRewardShowId == sChKey then
				
				if tAllReward == nil then
					tAllReward = {}
				end
				
				tAllReward[k] = v
			end
		end
	end
	
	if tAllReward == nil  then
		Sys_SaveAbnormalLog("函数 ClientRewardShow_GetData 中 [nClientRewardShowId]:[".. nClientRewardShowId .."] 在表中不存在数据")
		return false
	end

	return CommonFunc_Copy(tAllReward)
end

function Split(s, delim)
	if type(delim) ~= "string" or string.len(delim) <= 0 then
		return {}
	end
   
	local start = 1
	local t = {}
	while true do
	local pos = string.find (s, delim, start, true) -- plain find
		if not pos then
			break
	  	end
   
		table.insert (t, string.sub (s, start, pos - 1))
		start = pos + string.len (delim)
	end
	table.insert (t, string.sub (s, start))
   
	return t
end

-- 客户端使用
-- 外接获取函数 nClientRewardId 代表活动奖励ID
function ClientRewardShow_GetDataField(Key, Field, nClientRewardId, Index)
	if tClientRewardShow[nClientRewardId] == nil then
		return ""
	end

	local tInfo = tClientRewardShow[nClientRewardId]

	-- 获取通用币种信息(列表数量,单个币种信息)
	if Key == "RewardCommon" then
		-- 可支持的币种列表
		-- 注:后续新增货币或积分奖励,可在这里进行补充支持
		local common_list = {
			-- 积分
			["RewardGoldenLeague"] = {
				["Icon"] = "jifen"
			},
			-- 荣誉值
			["RewardArenaPoint"] = {
				["Icon"] = "rongyupic"
			},
			-- 赠点
			["RewardEMoneyMono"] = {
				["Icon"] = "zptianshipic"
			},
			-- 天石
			["RewardEMoney"] = {
				["Icon"] = "tianshipic"
			},
			-- 银两
			["RewardMoney"] = {
				["Icon"] = "huobipic"
			},
			-- 帮派天石
			["RewardSynEmoney"] = {
				["Icon"] = "bptspic"
			},
		}
		-- 已配置的币种数量
		local common_exist = {}
		for k,v in pairs(common_list) do
			if tInfo[k] ~= nil then
				table.insert(common_exist, k)
			end
		end
		if Field == "Size" then
			return #common_exist
		end

		--获取单个币种信息
		-- Key设置为币种
		Key = common_exist[Index+1]
		-- 币种配置是否存在
		if tInfo[Key] == nil then
			return ""
		end
		-- 数量
		if Field == "Value" then
			-- 帮派天石
			if Key == "RewardSynEmoney" then
				return tInfo[Key]
			end
			return tInfo[Key][Field]
		end

		-- 图标 
		if Field == "Icon" then
			return common_list[Key][Field]
		end

		return ""

	end

	-- 获取物品信息(列表数量,单个物品信息)
	if Key == "RewardItem" then
		
		-- 获取物品列表数量
		if Field == "Size" then	
			if tInfo[Key] == nil then
				return 0
			end		
			return #tInfo[Key]
		end
		-- 获取单个物品信息
		if tInfo[Key] == nil then
			return ""
		end

		if tInfo[Key][Index] == nil then
			return ""
		end

		if Field == "Id" or Field == "InstId" then
			return tInfo[Key][Index][Field]
		end

		if tInfo[Key][Index]["Attr"] == nil then
			return ""
		end

		--[[
			0 1 3 4320 1 0 0 1
			ATTR：flag  = 0
			物品数量：addamount = 1
			是否赠（3代表赠，其他值都是非赠）：monopoly = 3
			时效（分钟）：save_time = 4320
			时效激活：active = 1
				onlinetime = 0
				data = 0
			神佑：reduce_dmg = 1
		]]

		local attr = tInfo[Key][Index]["Attr"]
		local attr_arr = Split(attr, " ")
		local attr_len = #attr_arr
		-- 物品数量
		if Field == "Amount" and attr_len > 1 then
			return attr_arr[2]
		end

		-- 是否赠
		if Field == "Mono" and attr_len > 2 then
			return attr_arr[3]
		end

		-- 时效(分钟)
		if Field == "Time" and attr_len > 3 then
			return attr_arr[4] * 60
		end

		-- 时效激活
		if Field == "Active" and attr_len > 4 then
			return attr_arr[5] == 1
		end

		-- 神佑
		if Field == "Bless" and attr_len > 5 then
			return attr_arr[6]
		end

	end

	return ""
end

function ClientRewardShow_Unload()
	tClientRewardShow = nil
end
