%%%------------------------------------
%%% @Module  : race_act
%%% @Author  : zengzy
%%% @Created : 2019-04-27
%%% @Description: 竞榜的活动
%%%------------------------------------

%% ---------------------------------------------------------------------------
%% 类型定义
%% ---------------------------------------------------------------------------
-define(RACE_ACT_MOUNT, 1).             %% 活动1:坐骑竞榜
-define(RACE_ACT_LIGHT_WEAPON, 2).	    %% 活动2:光武竞榜
-define(RACE_ACT_WING,  3).	    		%% 活动3:翅膀竞榜


%%活动开启类型
-define(TYPE_OPEN_DAY,   1).            %% 开服天数控制
-define(TYPE_BJ_TIME,    2).            %% 北京时间控制

-define(NSHOW_TIPS_LIST,    []).	    %% 需要转动，不推送频道消息类型

-define(GOLD_ACT,		 1).			%%钻石奖池
-define(SCORE_ACT,		 2).			%%积分奖池

-define(OPEN_LV,         120).			%% 开启等级
-define(ACT_DAYS,          2).          %% 活动开启天数
-define(SHOW_HOURS,        2).          %% 展示时间（小时）

%%奖励状态
-define(CAN_GET,             1).        %% 可以领取
-define(HAS_GET,             2).        %% 已经领取
-define(CAN_NOT_GET,         3).        %% 未满足条件不能领取

-define(ETS_RACE_ACT,   ets_race_act).  %% ets表
%% ---------------------------------------------------------------------------
%% 其他定义
%% ---------------------------------------------------------------------------
-define(OPEN,         1).		   %% 开启
-define(CLOSE,		  0).		   %% 关闭
-define(ONE_TREASURE, 1).          %% 单抽
-define(TEN_TREASURE, 10).         %% 10抽
-define(ZERO_CLEAR,   1).		   %% 凌晨清
-define(ACT_CLEAR,    2).		   %% 活动清

%% ets结构(记录已开启的活动)
-record(ets_race_act, {
		type = 0,
		subtype = 0
	}).

%% ps身上竞榜活动的结构
-record(race_act, {
        data_list = []                      %% 活动需要统计保存的数据[#race_act_data{}]
    }).

%% 数据记录
-record(race_act_data,{
        id = {0, 0},                    %% {主类型,次类型}
        type = 0,                       %% 主类型
        subtype = 0,                    %% 次类型
        score = 0,						%% 积分
        today_score = 0,				%% 今日积分
        times = 0,						%% 累积次数
        reward_list = [],				%% 已获奖励:奖励id
        score_reward = [],				%% 已领取积分奖励id
        other = [],						%% 其他数据：根据各活动（）
        last_time = 0					%% 最后抽奖时间
	}).

-record(race_act_mgr, {
        opening_act = [],           %% 开启中的活动 [#base_race_act_info{}] 存放的活动开启类型为TYPE_BJ_TIME, TYPE_OPEN_DAY走功能内
        show_act = [],				%% 展示中的活动 [#base_race_act_info{}] 存放的活动开启类型为TYPE_BJ_TIME, TYPE_OPEN_DAY走功能内
        calc_timer = 0,             %% 结算定时器
        check_timer = 0             %% 零点定时器
	}).

%% 进程记录
-record(race_act_status, {
		zone_id = 0,                %% 区id
		bj_rank_list = [],			%% 北京时间活动类型榜单，格式[#rank_bj_type{}]
		od_rank_list = [] 			%% 开服天数活动类型榜单，格式[#rank_od_type{}]
	}).

%% 开服天数活动类型榜单
-record(rank_od_type,{
		id = {0,0},					%% 主键，格式{type,subtype}
        type = 0,                   %% 主类型
        subtype = 0,                %% 次类型
        data_list = [] 				%% 格式 [#rank_data{}]
	}).

%% 对应天数排行
-record(rank_od_data, {
		day = 0, 					%% 开始天数 (1:第一天,2:第二天)
		rank_list = [],			    %% 格式 #rank_role{}
		score_limit = 0			    %% 最后一名分数
	}).

%% 北京时间活动类型榜单
-record(rank_bj_type,{
		id = {0,0},					%% 主键，格式{type,subtype}
        type = 0,                   %% 主类型
        subtype = 0,                %% 次类型
		rank_list = [],			    %% 格式 #rank_role{}
		score_limit = 0			    %% 最后一名分数
	}).

-record(rank_role,{
		id = 0				%%玩家id
		,server_id = 0 		%%服务器id
		,server_num = 0     %%
		,node = none        %%所在节点
		,score = 0			%%分数
		,rank = 0			%%排名
		,figure = undefined
		,act_st = 0         %%游戏服活动开始时间
		,day = 0 			%%游戏服开始时间换算的天数（不存db）
		,last_time = 0
	}).
%% ---------------------------------------------------------------------------
%% sql定义
%% ---------------------------------------------------------------------------
-define(sql_race_act_role_select, <<
	"select
		`role_id`,`type`,`subtype`,`score`,`today_score`,`times`,`reward_list`,`score_reward`,`other`,`last_time` from race_act_role
	where role_id=~p ">>).
-define(sql_race_act_role_replace, <<
	"replace into race_act_role (`role_id`,`type`,`subtype`,`score`,`today_score`,`times`,`reward_list`,`score_reward`,`other`,`last_time`) values(~p,~p,~p,~p,~p,~p,'~s','~s','~s',~p)">>).
-define(sql_race_act_rank_select, <<"
    SELECT
        `role_id`,`type`, `subtype`,`server_id`,`server_num`,`name`, `score`, `act_time`, `time`
    FROM race_act_rank order by score desc">>).
-define(sql_race_act_rank_replace,<<"
	replace into `race_act_rank`(
         `role_id`,`type`, `subtype`,`server_id`, `server_num`,`name`, `score`,`act_time`, `time`)
    values(~p, ~p, ~p, ~p, ~p, '~s', ~p, ~p, ~p)">>).
-define(sql_race_act_open_selete, <<"select `type`,`subtype` from race_act">>).
-define(sql_race_act_open_replace, <<"replace into `race_act`(type,subtype) values (~p,~p) ">>).

%% ---------------------------------------------------------------------------
%% 配置定义
%% ---------------------------------------------------------------------------

%%活动配置
-record(base_race_act_info, {
        type = 0,			%%主类型
        sub_type = 0,		%%次类型
        act_type = 0,		%%活动开启类型
        name = "",			%%名字
        open_day = 0,		%%开服天数
        open_over = 0,		%%开服结束
        start_time = 0,     %%活动开始时间
        end_time = 0,       %%活动结束时间
        clear_type = 0,		%%1为零点清；2为活动清
        treasure = [],		%%抽检方式 [{次数,金额}]
        others = []			%%其他
    }).

%%排名奖励
-record(base_race_act_rank_reward,{
		type = 0,			%%主类型
		sub_type = 0,		%%次类型
		reward_id = 0,      %%奖励id
		rank_min = 0,		%%排名下限
		rank_max = 0,		%%排名上限
		limit_val = 0,		%%最低上榜值
		reward = []			%%奖励
	}).

%%阶段奖励
-record(base_race_act_stage_reward,{
		type = 0,			%%主类型
		sub_type = 0,		%%次类型
		reward_id = 0,		%%奖励id
		need_val = 0,		%%所需值
		reward = []			%%奖励
	}).

%%奖池配置
-record(base_race_act_reward,{
		type = 0,			%%主类型
		sub_type = 0,		%%次类型
		cost_type = 0,		%%奖池类型
        reward_id = 0,      %%奖励id
        ratio = 0,			%%显示权重
        reward = [],		%%内容
        condition = []		%%条件 	[加权下限,加权上限,权重,临时权重,必中次数]
	}).

