%% ---------------------------------------------------------------------------
%% @doc 全民动员.
%% @author zmh
%% @since  20200811
%% ---------------------------------------------------------------------------

-define(MOBILIZE_ACT_DATA(Type, SubType), {mobilize_act_data, Type, SubType}).
-define(MOBILIZE_DAY_REWARD_DEFAULT_NEED, 999).   %% 天数奖励默认需要完成任务数量(配置缺失时)

-define(MOBILIZE_CALC_UPDATE, 1).        %% 数值更新
-define(MOBILIZE_CALC_SUM,    2).        %% 数值累加

-define(MOBILIZE_POWER_CALC_DAY, 7).     %% 战力任务计算天数
-define(MOBILIZE_EQUIP_GEM_CALC_DAY, 6). %% 装备宝石任务计算天数

-define(MOBILIZE_SPEC_TASK_TYPE_LIST, [gems, combat]).

%% 假数据进度
-record(fake_cord, {
    id = {0,0,0},  %% {tasktype, fakeid, start_day}
    act   = 0,   %% 活动子ID
    stime = 0,   %% 活动开启时间
    etime = 0,   %% 活动结束时间(任务结束时间)
    ltime = 0,   %% 上次更新时间

    remain_score = 0,   %% 待补助分(还剩需要补助多少)
    per_score    = 0,   %% 单次补助分
    remain_times = 0,   %% 如果还不够，继续补助次数(事实上很少用)
    remain_click = 0,   %% 多出来的补助次数(事实上很少用)

    process = 0,  %% 进度
    real_pro = 0  %% 真实进度
}).

%% 活动数据
-record(mobilize_act_data, {
    type     = 0,
    subtype  = 0,
    act_data = [],
    time     = 0            %% 上次更新时间
}).

%% 全员动员 玩家完整数据
-record(mobilize_role, {
    day_list = []                       %% 天数区间奖励[#mobilize_day{}...]
    ,task_stat = #{}                    %% 任务完成度统计{{start,end}=>[#mobilize_task{}...]}
}).

%% 全员动员 玩家大奖进度数据
-record(mobilize_day, {
    day_interval = {}                   %% {start, end} 天数区间
    ,total = 0                          %% 任务总进度
    ,state = 0                          %% 是否已领取奖励
}).

%% 全员动员 玩家任务进度
-record(mobilize_task, {
    task_type = 0                      %% 任务类型Id - Key
    ,task_pro = 0                       %% 任务进度
    ,day_interval = {}                  %% {start, end} 天数区间(非重要数据)
    ,task_award_log = []                %% 任务奖励领取进度[task_id1,id2...]
    ,time = 0                           %% 最近更新任务进度时间戳
}).

%% ------------------------------- 配置 -------------------------------------------
%% 任务奖励配置
-record(custom_mobilize_task, {
    task_type = 0                       %% 任务类型Id
    ,task_id = 0                        %% 任务Id
    ,day  = 0                           %% 开始天数
    ,end_day = 0                        %% 结算天数
    ,server_pro = 0                     %% 全服进度
    ,person_pro = 0                     %% 个人进度
    ,gain_con   = 0                     %% 领取条件

    ,desc = 0                           %% 任务描述
    ,reward = []                        %% 任务奖励
    ,link = []                          %% 前端跳转
}).

%% 天数奖励配置
-record(base_custom_mobilize_day, {
    subtype = 0                         %% 活动子Id
    ,day  = 0                           %% 开始天数
    ,end_day = 0                        %% 结算天数
    ,reward  = []                       %% 奖励
    ,need_num = 0                       %% 需要完成任务数量
    ,show_model = []                    %% 前端展示模型
}).

%% ------------------------------- db -------------------------------------------
%% db mobilize_task
%% mobilize_days_reward

%% 任务
-define(SAVE_MOBILIZE_TASK,
    <<"REPLACE INTO mobilize_task (`role_id`, `sub_type`, `start_day`, `end_day`, `task_type`, `progress`, `award_log`, `time`) VALUES (~p, ~p, ~p, ~p, ~p, ~p, '~ts', ~p)">>).
-define(SELECT_MOBILIZE_TASK,
    <<"SELECT `start_day`, `end_day`, `task_type`, `progress`, `award_log`, `time` FROM mobilize_task WHERE `role_id` = ~p AND `sub_type` = ~p">>).

%% 天数大奖
-define(SAVE_MOBILIZE_DAYS_REWARD,
    <<"REPLACE INTO mobilize_days_reward (`role_id`, `sub_type`, `start_day`, `end_day`, `total`, `state`) VALUES (~p, ~p, ~p, ~p, ~p, ~p)">>).
-define(SELECT_MOBILIZE_DAYS_REWARD,
    <<"SELECT `start_day`, `end_day`, `total`, `state` FROM mobilize_days_reward WHERE `role_id`=~p AND `sub_type`=~p">>).

%% 假数据
-define(SQL_MOBILIZE_FAKE_GET,<<"SELECT `task_type`,`fake_id`,`act`,`day`,`stime`,`etime`,`ltime`,`remain_score`,`per_score`,`remain_times`,`remain_click`,`process`,`real_pro` FROM `mobilize_fake_cord`">>).
-define(SQL_MOBILIZE_FAKE_SAVE,
    "REPLACE INTO `mobilize_fake_cord` (`task_type`,`fake_id`,`act`,`day`,`stime`,`etime`,`ltime`,`remain_score`,`per_score`,`remain_times`,`remain_click`,`process`,`real_pro`) values ~ts").
-define(SQL_MOBILIZE_FAKE_LOG_BATCH,
    "REPLACE INTO `log_mobilize_progress` (`act`,`task_type`,`desc`,`fake`,`process`,`real_pro`,`day`,`time`) values ~ts").

-define(SQL_FAKE_PROCESS_UPDATE, <<"UPDATE `mobilize_fake_cord` SET `ltime`= ~p,`process`=~p,`real_pro`=~p WHERE `task_type` = ~p and `fake_id`=~p and `act` = ~p and `day` =~p">>). %%进度相关
-define(SQL_FAKE_CLICK_UPDATE, <<"UPDATE `mobilize_fake_cord` SET `ltime`= ~p,`remain_score`= ~p,`per_score`= ~p,`remain_times`= ~p,`remain_click`= ~p,`process`=~p,`real_pro`=~p WHERE `task_type` = ~p and `fake_id`=~p and `act` = ~p and `day` =~p">>). %%计数器相关更新

%% 战力任务数据
-define(SQL_SAVE_MOBILIZE_POWER, <<"insert into mobilize_power (`role_id`, `power`) values (~p, ~p)">>).
-define(SQL_SELECT_MOBILIZE_POWER, <<"select `power` from mobilize_power where `role_id` = ~p limit 1">>).