%%-----------------------------------------------------------------------------
%% @Module  :       top_pk.hrl
%% @Author  :       J
%% @Email   :       j-som@foxmail.com
%% @Created :       2017-12-05
%% @Description:    巅峰竞技
%%-----------------------------------------------------------------------------

-define(TOP_PK_KV(Id), lib_top_pk_util:get_keyvalues(Id)).
%% 第一个赛季开启日期{Y,M,D} 注：便于多语言版本管理，此常量应放到lib_vsn_control管理
-define(TOP_PK_KV_FIRST_SEASON_OPEN_DATE,   data_vsn:top_pk_first_season_open_date()).
-define(TOP_PK_KV_SEASON_DURATION,          ?TOP_PK_KV(2)). %% 赛季时长(天)
-define(TOP_PK_KV_START_CENTER_OPEN_DAY,    ?TOP_PK_KV(3)). %% 开启跨服竞技需要的开服天数
-define(TOP_PK_KV_START_CENTER_WORLD_LV,    ?TOP_PK_KV(4)). %% 开启跨服竞技需要的世界等级
-define(TOP_PK_KV_LOCAL_SCENE,              ?TOP_PK_KV(5)). %% 本服竞技场景id
-define(TOP_PK_KV_CENTER_SCENE,             ?TOP_PK_KV(6)). %% 跨服竞技场景id
-define(TOP_PK_KV_LOCAL_BORN_COORD,         ?TOP_PK_KV(7)). %% 本服战场出生点{X,Y}
-define(TOP_PK_KV_CENTER_BORN_COORD,        ?TOP_PK_KV(8)). %% 跨服战场出生点{X,Y}
-define(TOP_PK_KV_BATTLE_TIME,              ?TOP_PK_KV(9)). %% 每场竞技比赛时长(秒)
-define(TOP_PK_KV_READY_TIME,               ?TOP_PK_KV(10)). %% 每场竞技比赛准备时长(秒)
-define(TOP_PK_KV_ADVANCE_TIME,             ?TOP_PK_KV(11)). %% 开启竞技活动提前多久预告(分钟)
-define(TOP_PK_KV_FAIL_COUNT_TO_MATCH_DUMMY,?TOP_PK_KV(12)). %% 玩家连续失败多少场匹配一次假人
-define(TOP_PK_KV_MATCH_TIME,               ?TOP_PK_KV(13)). %% 每轮匹配时长(s)
-define(TOP_PK_KV_MATCH_MAX_NUN,            ?TOP_PK_KV(14)). %% 最多匹配几轮，还匹配不到匹配假人
-define(TOP_PK_KV_RANK_SIZE,                ?TOP_PK_KV(15)). %% 排行榜最大长度
-define(TOP_PK_KV_OPEN_LV,                  ?TOP_PK_KV(16)). %% 功能开启等级
-define(TOP_PK_KV_INIT_SCORE,               ?TOP_PK_KV(17)). %% 赛季玩家初始积分
-define(TOP_PK_KV_DAILY_COUNT,              ?TOP_PK_KV(18)). %% 玩家每天可以参与匹配次数
-define(TOP_PK_KV_CONTINUED_WIN_TV,         ?TOP_PK_KV(19)). %% 连胜传闻 格式：[{连胜次数,功能传闻id}]
-define(TOP_PK_KV_NEW_GRADE_TV,             ?TOP_PK_KV(20)). %% 段位传闻 格式：[{段位,阶数,功能传闻id}]
-define(TOP_PK_KV_MATCH_AREA_LIST,          ?TOP_PK_KV(21)). %% 匹配区间列表 格式：[{匹配次数，名次区间}]
-define(TOP_PK_KV_ELO_K_FACTOR,             ?TOP_PK_KV(22)). %% ELO天梯算法K参数(通常为32) [弃用]
-define(TOP_PK_KV_ELO_S_FACTOR,             ?TOP_PK_KV(23)). %% ELO天梯算法S参数(通常为1)  [弃用]
-define(TOP_PK_KV_SEASON_RANK_AWARD_NUM,    ?TOP_PK_KV(28)). %% 赛季排行奖励发放前几名
-define(TOP_PK_KV_SEASON_AWARD_NEED_OPENDAY,?TOP_PK_KV(29)). %% 赛季排行奖励发放前几名

%% 竞技环境类型
-define(ACT_CLS_LOCAL,  0).         %% 竞技环境类型：单服竞技
-define(ACT_CLS_CENTER, 1).         %% 竞技环境类型：跨服竞技

%% 活动开启状态
-define(ACT_STATUS_STOP,    0).     %% 活动开启状态：未开始
-define(ACT_STATUS_START,   1).     %% 活动开启状态：开始

%% 巅峰竞技常量配置
-record(base_top_pk_keyvalues, {
    id = 0,                         %% 常量Id
    value = 0,                      %% 常量值
    about = ""                      %% 常量描述
}).

%% 段位信息配置
-record(base_top_pk_grade_info, {
    grade_num = 0,                  %% 段位序号
    stage = 0,                      %% 阶数
    name = "",                      %% 段位名
    min_score = 0,                  %% 最小积分
    max_score = 0,                  %% 最大积分
    win_score = 0,                  %% 胜利积分
    lose_score = 0                  %% 失败积分
}).

%% 假人配置
-record(base_top_pk_fake_man, {
    min_lv = 0,                     %% 最小等级
    max_lv = 0,                     %% 最大等级
    fake_man_id = 0,                %% 假人id
    power_range = {0,0}             %% 战力范围{最小战力, 最大战力}
}).

-record(top_pk_status, {
    score = 0                       %% 赛季积分
    ,grade_reward_list = []         %% 已领段位奖励列表[grade]
    ,match_reward_list = []         %% 已领匹配次数奖励[match_count]
    ,pk_time = 0                    %% 上次PK时间
    ,enter_count = 0                %% 匹配场数
    ,continued_fail = 0             %% 连续失败场次(只算匹配真人的，匹配到假人重置)
    ,continued_win = 0              %% 连续胜利场次
    ,pk_state = []                  %% 匹配状态
}).

-record(rank_role, {
    role_id = 0,                    %% 玩家id
    role_name = "",                 %% 玩家名
    career = 0,                     %% 职业
    power = 0,                      %% 战力
    platform = "",                  %% 平台
    server_num = 0,                 %% 服务器显示编号
    server_id = 0,                  %% 服务器id
    rank_id = 0,                    %% 排名
    score = 0,                      %% 赛季积分
    pk_time = 0                     %% 上次PK时间
}).

-record(local_state, {
    act_status = 0,                 %% 活动状态：0未开始，1开始
    season_id = 0,                  %% 赛季id
    world_lv = 0,                   %% 赛季开启时服务器等级
    cls_type = 0,                   %% 竞技环境类型：0单服竞技，1跨服竞技
    rank_list = []                  %% 玩家排行列表[#rank_role{}|...]
}).

-record(rank_center_state, {
    season_id = 0,                  %% 赛季id
    is_db = 0,                      %% 是否入库(0否|1是)
    rank_list = []                  %% 玩家排行列表[#rank_role{}|...]
}).

-record(match_state, {
    cls_type = 0,                   %% 竞技环境类型：0单服竞技，1跨服竞技
    start_time = 0,                 %% 开始时间戳
    end_time = 0,                   %% 结束时间戳
    end_ref = none,                 %% 结束定时器引用
    match_ref = none,               %% 匹配定时器引用
    match_queue = []                %% 匹配队列 [#match_info{}]
}).

-record(match_info, {
    role_key = {none, 0},           %% 玩家key {Node, RoleId}
    name = "",                      %% 玩家名
    lv = 0,                         %% 玩家等级
    platform = "",                  %% 平台名
    server_num = 0,                 %% 服务器显示编号
    score = 0,                      %% 积分
    power = 0,                      %% 战力
    continued_fail = 0,             %% 连续失败场次(只算匹配真人的，匹配到假人重置)
    match_count = 1,                %% 匹配次数
    rank_id = 0,                    %% 匹配队列的临时排名
    match_time = 0                  %% 匹配时间戳
}).

-define(SQL_SELECT_PLAYER_TOP_PK,           <<"select `score`, `grade_reward_list`, `match_reward_list`, `pk_time`, `enter_count`, `continued_fail`, `continued_win` from `player_top_pk` where `role_id` = ~p">>).
-define(SQL_REPLACE_INTO_PLAYER_TOP_PK,     <<"replace into `player_top_pk`(`role_id`, `score`, `grade_reward_list`, `match_reward_list`, `pk_time`, `enter_count`, `continued_fail`, `continued_win`) values (~p, ~p, '~s', '~s', ~p, ~p, ~p, ~p) ">>).
-define(SQL_SELECT_PLAYER_TOP_PK_FOR_RANK,  <<"select `role_id`, `score`, `pk_time` from `player_top_pk` where `score`>0 order by `score` desc limit ~p" >>).
-define(SQL_TRUNCATE_PLAYER_TOP_PK,         <<"truncate `player_top_pk`">>).
-define(SQL_SELECT_RANK_CENTER,             <<"select `role_id`, `role_name`, `career`, `power`, `platform`, `server_num`, `server_id`, `score`, `pk_time` from `top_pk_rank_center`">>).
-define(SQL_TRUNCATE_RANK_CENTER,           <<"truncate `top_pk_rank_center`">>).
-define(SQL_REPLACE_INTO_RANK_CENTER,       <<"replace into `top_pk_rank_center`(`role_id`, `role_name`, `career`, `power`, `platform`, `server_num`, `server_id`, `score`, `pk_time`) values ~ts">>).


%% ----- 以下为old配置 -----

-define(DAILY_ID_REWARD_STATE, 1).     %% 日常id 用来标识今天是否领过每日荣誉值
-define(DAILY_ID_ENTER_COUNT, 2).      %% 每日进入次数
-define(DAILY_ID_BUY_COUNT, 3).        %% 每日购买次数
-define(DAILY_ID_COUNT_REWARD_MARK, 4).%% 日常id 用来标识今天领过次数奖励的状态 2#10001001 标识领过第1 4 8次的奖励

-define(STATE_NONE, 0).             %% DAILY_ID_REWARD_STATE 的值的含义 未设置
-define(STATE_SETUP, 1).            %% DAILY_ID_REWARD_STATE 的值的含义 已设置未领取
-define(STATE_GOT, 2).              %% DAILY_ID_REWARD_STATE 的值的含义 已经领取

-define(RANK_NUM_MAX, 30).          %% 排行榜最多人数
