%% ---------------------------------------------------------------------------
%% @doc activitycalen.hrl
%% @author xiaoxiang
%% @since  2017-03-06
%% @deprecated 活动日历
%% ---------------------------------------------------------------------------
-ifndef(ACTIVITYCALEN_HRL).
-define(ACTIVITYCALEN_HRL, ok).

-define(AC_WAIT, 0).    %% 活动等待
-define(AC_OPEN, 1).    %% 活动开启
-define(AC_END, 2).     %% 活动结束
-define(AC_LV_LIMIT, 3). %% 活动等级限制
-define(AC_FINISH, 4).   %% 活动完成

%% ----------------------- 次数类型 -----------------------
-define(ACTIVITY_COUNT_TYPE_NORMAL, 1).        % 通用次数(活动进入次数等等)
-define(ACTIVITY_COUNT_TYPE_HELP_COUNT, 2).    % 助战次数(目前用于副本助战)


-define(ACTIVITY_TYPE_DAILY, 1).        % 1-非限时活动
-define(ACTIVITY_TYPE_TIME, 2).         % 2-限时活动

-define(ACTIVITY_LIVENESS, 1).         % 日计数器 活跃度次数Id

-define(AC_LIVE_ADD,        10000).
-define(AC_LIVE_ADD_EACH,   10000).

-define(LOG_TYPE_AC_START_BY_CALEN,  1).            %% 活动日历拉起活动
-define(LOG_TYPE_AC_START_BY_AC,  2).               %% 活动启动
-define(LOG_TYPE_AC_END_BY_AC,  3).                 %% 活动结束
-define(LOG_TYPE_AC_ADVANCE_BY_CALEN,  4).          %% 活动预告

-define(NOT_REWARD,           0).   %% 不可领
-define(HAVE_REWARD,          1).   %% 可领
-define(FINISH_REWARD,        2).   %% 已领

-define(ETS_ACTIVITYCALEN,     ets_activitycalen).       %% #ets_activitycalen{}
-define(ETS_ACTIVITY_IN_STATE, ets_activity_in_state).   %% #ets_activity_in_state{}

-define(SUP_VIP_ADD_TIMES, 3).      %% 贵族增加快速挂机次数

-record(ets_activitycalen, {
        id  = 0,              %%玩家id
        create_time = 0,      %%玩家创建时间
        liveness_list = []    %%活跃度：保留5天 [{ZeroTime, Val}]
    }).

%% 玩家的活动进入状态
-record(ets_activity_in_state, {
        key = {}              %% {mod_id, role_id}
        ,mod_id = 0           %% 功能Id
        ,is_count_down = 0    %% 是否倒计时结束进入 0-否 1-是
}).

%% 其他参数(15701协议传递的特殊参数)
-record(other_data, {
    is_sup_vip = false        %% 是否贵族
    ,main_line_times = []     %% 主线副本{使用次数,配置最大次数}
}).

%% -------------------------------------------后台配置-----------------------------------------------------------------
%% 活动日历
-record(base_ac, {
        module = 0,
        module_sub = 0,                 %  功能id和子功能ID确定唯一活动
        ac_sub = 0,                     %  活动子类用于区分同一活动的不同配置
        ac_name = "",
        ac_icon = 0,
        num = 0,                        %  活动单位：1-单人2-组队3-公会4-对战5-竞技
        start_lv = 0,                   %  玩家到达等级才看到“日常”标签页的图标，才能参加活动
        end_lv = 0,                     %  玩家到达等级，活动消失，“日常”标签页的图标消失
        ac_type = 0,                    %  活动类型：1-非限时活动；2-限时活动
        week = [],                      %  格式：[1,2,3,4,5,6,7] ，7表示星期天 []默认为每天都开
        month = [],                     %  格式：[1,2,28], 勿填>28的数字（程序容错，>28时不开启） []默认为每天都开
        time = [],                      %  格式：[{2017,3,11}]，[] 默认为每天都开
        time_region = [],               %  格式：[{{开始时间},{结束时间}},{{}}]；如[{{20,0},{20,30}}] 非定时活动固定填[]
        open_day = 0,                   %  格式：[{开服开始天数，结束天数},{}];如[{1,20},{50,100}],[]默认每天都开
        merge_day = 0,                  %  和开服格式一样,注：[]为单服，合服必须填具体内容
        about = "",
        reward = [],                    % 格式:[{等级,[{类型，道具id，数量},{类型，道具id，数量}]}]
        ask = 0,
        look = 0,
        other = [],
        start_timestamp = 0,            % 开始时间戳
        end_timestamp = 0,              % 结束时间戳
        timestamp = [],                 % 时间范围有效 [{start_timestamp, end_timestamp}|...] 开始时间戳，结束时间戳  时间戳属于区间则生效 []默认满足
        type = 0,                       % 默认为0 merge_day使用的为活动日历规则（[]为单服，合服必须填具体内容 ）1为merge_day使用充值活动规则（[]为满足）
        node_type = 0,                  % 生效节点：0本服/1跨服/2本服和跨服
        pre_notice = 0                  % 提前预告显示(配置格式为 分钟数，例：5即为活动开始5分钟前预告。0为不预告)
    }).

%% 活跃度配置
-record(ac_liveness, {
        module = 0,
        module_sub = 0,
        act_type = 0,
        name = "",
        start_lv = 0,
        end_lv = 0,
        max = 0,
        res_max = 0,
        live = 0
    }).

%% 奖励配置
-record(ac_reward, {
        sort = 0,
        id = 0,
        min_lv = 0,
        max_lv = 0,
        live = 0,                       % 活跃度
        reward = []
    }).

%% 活动推送配置
-record(ac_push, {
        module = 0,
        module_sub = 0,
        push = 0,
        push_msg = ""
    }).

%% 活跃度升级配置
-record(base_liveness_lv, {
        lv = 0,                    % 等级
        exp = 0,                   % 经验
        attr = [],                 % 属性
        awards = []
    }).

%% 活跃度外形激活配置
-record(base_liveness_active, {
        id = 0,                         % 外形Id
        name = "",                      % 外形名称
        lv = 0,                         % 激活等级
        figure_id = 0                   % 资源id
    }).

%% 活动预约
-record (base_act_reserve, {
    module_id = 0,                 % 功能id
    module_sub = 0,                % 子功能id
    ac_sub = 0,                    % 子类id
    index = 0,                     % 前端排序
    rewards = [],                  % 预约奖励
    content = "",                  % 文本
    sign = []                      % 标识
    }).


%% --------------------------------------------------state---------------------------
-record(ac_mgr_state, {
        ref = none,
        ac_maps = maps:new()            % 活动状态记录
        %ac_start = []                  % 活动首次开启记录
        ,cluster_type = 0               % 节点类型：跨服|游戏服
    }).

-record(ac_state, {
        ac_maps = maps:new(),           % 活动状态
        ac_end_maps = maps:new(),       % role_id => [{ac_id, num}|...]
        live_maps = maps:new()          % role_id => live
    }).


-record(role_liveness, {
        lv  = 0,           % 活跃度等级
        exp = 0,           % 经验
        attr = [],         % 活跃度增加的属性

        live = 0,
        olive = 0,
        ltime = 0,

        combat = 0         % 活跃度增加的战力
    }).
%% ----------------------------------------------------------------------------------

-define(sql_inset_ac_start, <<"insert into active_start(ac_id, ac_sub, ac_type, time) values(~p, ~p, ~p, ~p)">>).

-define(sql_select_ac_start, <<"select `ac_id`, `ac_sub`, `ac_type`, `time` from `active_start`  ">>).

-define(sql_player_liveness_select, <<"select `lv`, `exp`,`live`,`olive`,`ltime` from `player_liveness` where `rid` = ~p">>).

-define(sql_player_liveness_replace, <<"replace into `player_liveness` (`rid`, `lv`, `exp`,`live`,`olive`,`ltime`) values(~p, ~p, ~p,~p,~p,~p)">>).

%%玩家每日活跃度统计（5天）
-define(sql_select_role_live, <<"select role_id, create_time, livess_list from `player_daily_liveness` ">>).
-define(sql_replace_role_live, <<"replace into `player_daily_liveness` (role_id, create_time, livess_list) values(~p, ~p, '~s')">>).

-define(sql_select_role_reserve, <<"select module, module_sub, ac_sub, reserve, join_act, rewards from `role_act_reserve` where role_id = ~p">>).
-define(sql_replace_into_role_reserve, <<"replace into `role_act_reserve` set role_id = ~p, module = ~p, module_sub = ~p, ac_sub = ~p, reserve = ~p, join_act = ~p, rewards = ~p">>).
-define(sql_batch_replace_into_role_reserve, <<"replace into `role_act_reserve`(role_id, module, module_sub, ac_sub, reserve, join_act, rewards) values ~ts">>).
-define(sql_batch_replace_role_reserve_value, <<"(~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).
-define(sql_delete_role_reserve, <<"delete from `role_act_reserve` where role_id = ~p">>).
-define(sql_truncate_role_reserve, <<"truncate table `role_act_reserve`">>).
-define(sql_batch_replace_role_reserve, <<"replace into `role_act_reserve`(`role_id`, `module`, `module_sub`, `ac_sub`, `reserve`, `join_act`, `rewards`)">>).
-define(sql_delete_role_module_reserve, <<"delete from `role_act_reserve` where role_id = ~p and module = ~p and module_sub = ~p and ac_sub = ~p">>).

-endif.

