%%%-------------------------------------------------------------------
%%% @doc     社团竞速-头文件
%%% Module  : guild_race_rank.hrl
%%% Created : 2020-07-13
%%% @Author : tyl
%%%-------------------------------------------------------------------

-define(ONE_HOUR_SECOND, 60*60).  %% 一小时秒数

-define(GUILD_TOP_RANK, [1,2,3]).   %% 可获得人数扩张的社团排名
-define(DEFAULT_END_DAY, 7).        %% 默认活动结束天数
-define(REWARD_RECEIVE_DAY, 8).     %% 奖励可领取天数

-define(CHANGE_TYPE_OUT, 0).      %% 退出社团
-define(CHANGE_TYPE_IN,  1).      %% 进入社团

%% 是否第一次发放奖励
-define(FIRST_SEND_REWARD_NO,  0).
-define(FIRST_SEND_REWARD_YES, 1).

%% 是否已经开始结算
-define(START_REWARD_NO,   0).
-define(START_REWARD_YES,  1).

%% 任务计算类型
-define(TASK_TYPE_CALC,    1). %% 累计型
-define(TASK_TYPE_REPLACE, 2). %% 替换型

%% 任务状态
-define(TASK_NOT_FINISH,    0). %% 任务未完成
-define(TASK_FINISHED,      1). %% 任务完成
-define(TASK_HAS_RECEIVED,  2). %% 任务奖励已领取

%% 任务类型
-define(TASK_TYPE_CREATE_GUILD, 1).     %% 创建社团
-define(TASK_TYPE_INVITE_ROLE,  2).     %% 邀请玩家
-define(TASK_TYPE_POWER_UP,     3).     %% 战力提升
-define(TASK_TYPE_LIVE_UP,      4).     %% 活跃提升
-define(TASK_TYPE_GUILD_BOSS,   5).     %% 社团幻魔

%% 是否已经领取奖励
-define(NOT_RECEIVE_REWARD, 0).     %% 未领取奖励
-define(CAN_RECEIVE_REWARD, 1).     %% 可领取奖励
-define(HAS_RECEIVE_REWARD, 2).     %% 已领取奖励

%% 发放奖励的排名需求
-define(SEND_REWARD_RANK_NEED,  10).        %% 称号奖励
-define(SEND_POWER_REWARD_RANK_NEED,        %% 战力榜奖励(全员/团长专属)
	data_guild_race_rank:get_guild_race_rank_kv_cfg(power_rank_top)
).
-define(SEND_LIVE_REWARD_RANK_NEED,         %% 活跃榜奖励(全员/团长专属)
	data_guild_race_rank:get_guild_race_rank_kv_cfg(active_rank_top)
).

%% 形象修改
-define(FIGURE_CHANGE_NAME,    1).
-define(FIGURE_CHANGE_VIP,     2).
-define(FIGURE_CHANGE_SUP_VIP, 3).

%% 社团竞速管理进程状态数据
-record(guild_race_rank_state, {
	guild_rank_list      = []   %% 公会排行
	,member_rank_map     = #{}  %% 成员排名 #{guild_id =>[]...}
	,old_guild_rank_list = []   %% 旧的成员排名,开服前一个小时将第一个社团扔进来(这个逻辑废弃)
	,old_member_rank_map = #{}  %% 旧的成员排名,开服前一个小时将第一个社团扔进来(这个逻辑废弃)
	,disband_rank_list   = []   %% 解散的社团列表[guild_id1,guild_id2...]
	,leave_member_map    = #{}  %% 离开社团的成员#{guild_id=>[mem1,mem2]...}
	,role_guild_map      = #{}  %% 第八天使用(存储第八天0点结算时玩家和社团的映射)
	,ref                 = []   %% 定时器(每隔一小时发放一次奖励)
	,start_reward        = 0    %% 开始结算状态 0-未开启 1-已开启
	,send_ref            = []   %% 邮件发放定时器
	,guild_task          = #{}  %% 团长任务#{guild=>[#guild_task{}...]}
}).

%% 社团榜单数据
-record(guild_rank, {
	rank            = 0         %% 排行
	,guild_id       = 0         %% 社团Id
	,guild_name     = ""        %% 社团名称
	,guild_lv       = 0         %% 公会等级
	,captain_id     = 0         %% 团长Id
	,captain_name   = ""        %% 团长名称
	,limit_num      = 0         %% 人数上限(包括增加人数)
	,sum_power      = 0         %% 社团总战力
	,old_power      = 0         %% 上一次结算的战力
	,old_rank       = 0         %% 上次结算的战力排行
	,sum_live       = 0         %% 社团总活跃值
	,old_live       = 0         %% 上次结算社团总活跃值
	,live_rank      = 0         %% 总活跃值排行(只存内存)
	,old_live_rank  = 0         %% 上次结算社团总活跃值排行(只存内存)
	,time           = 0         %% 社团创建时间
	,is_first       = 0         %% 是否是第一个创建社团(只存内存，重启后数据消失)
	,create_id      = 0         %% 创建者Id
}).

%% 成员榜单数据
-record(member_rank, {
	rank            = 0         %% 排名
	,guild_id       = 0         %% 社团Id
	,role_id        = 0         %% 角色Id
	,role_name      = ""        %% 角色名称
	,position       = 0         %% 职位
	,vip_lv         = 0         %% vip等级
	,sup_vip        = 0         %% 特权贵族类型
	,power          = 0         %% 战力
	,old_power      = 0         %% 上一次结算的战力
	,old_rank       = 0         %% 上一次结算的排名
	,live           = 0         %% 活跃值
	,old_live       = 0         %% 上次结算活跃值
	,received_power = 0         %% 是否已领取战力榜奖励
	,received_live  = 0         %% 是否已经领取活跃榜奖励
	,received_captain_power = 0      %% 是否已经领取团长战力榜奖励
	,received_captain_live  = 0      %% 是否已经领取团长活跃榜奖励
}).

%% 团长任务
-record(guild_race_rank_task, {
	task_id    = 0      %% 任务Id
	,progress  = 0      %% 进度
	,status    = 0      %% 状态
}).

%% ==================================== 后台配置 ===========================
%% 常量配置
-record(guild_race_rank_kv_cfg, {
	id          = 0             %% Id
	,key        = ""            %% 键
	,value      = ""            %% 值
	,remark     = ""            %% 备注
}).

%% 社团竞榜结算 - 个人奖励配置
-record(guild_race_rank_reward_cfg, {
	id          = 0             %% 主键Id
	,rank_low   = 0             %% 排名下限
	,rank_high  = 0             %% 排名上限
	,reward     = []            %% 个人奖励
	,guild_rank = 0             %% 社团排名
}).

%% 社团竞榜结算 - 社团扩张人数配置
-record(guild_race_rank_expand_cfg, {
	day          = 0            %% 天数
	,add_mem_num = 0            %% 增加成员数量
}).

%% 任务配置
-record(base_guild_race_rank_task, {
	id          = 0            %% 任务Id
	,sequence   = 0            %% 排序
	,task_name  = ""           %% 任务名称
	,task_desc  = ""           %% 任务描述
	,reward     = []           %% 奖励
	,condition  = []           %% 条件
	,client_skip= []           %% 前端跳转
}).

%% ------------------------------ 数据库操作 ------------------------------------
-define(insert_guild_race_rank,
	<<"replace into guild_race_rank (`guild_id`, `guild_name`, `guild_lv`, `captain_id`, `sum_power`, `old_power`, `old_rank`, `old_live`, `create_id`, `time`) values (~p, '~ts', ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).
-define(select_guild_race_rank,
	<<"select `guild_id`, `guild_name`, `guild_lv`, `captain_id`,`sum_power`,`old_power`, `old_rank`, `old_live`, `create_id`, `time` from guild_race_rank">>).
-define(delete_guild_race,
	<<"delete from guild_race_rank where `guild_id` = ~p">>).

-define(update_guild_race_rank_power,
	<<"update guild_race_rank set `sum_power` = ~p where `guild_id` = ~p">>).
-define(update_guild_race_rank_old_rank,
	<<"update guild_race_rank set `old_rank` = ~p, `old_power` = ~p where `guild_id` = ~p">>).
-define(update_guild_race_rank_old_live,
	<<"update guild_race_rank set `old_live` = ~p where `guild_id` = ~p">>).

-define(update_guild_race_rank_guild_name,
	<<"update guild_race_rank set `guild_name` = '~ts' where `guild_id` = ~p">>).
-define(update_guild_race_rank_guild_lv,
	<<"update guild_race_rank set `guild_lv` = ~p where `guild_id` = ~p">>).
-define(update_guild_race_rank_captain,
	<<"update guild_race_rank set `captain_id` = ~p where `guild_id` = ~p">>).

%% 成员榜相关
-define(insert_guild_race_rank_member,
	<<"replace into guild_race_rank_member (`role_id`, `guild_id`, `position`, `old_power`, `old_rank`, `old_live`, `received_power`, `received_live`, `received_captain_power`, `received_captain_live`) values (~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).
-define(select_guild_race_rank_member,
	<<"select `role_id`, `guild_id`, `position`, `old_power`, `old_rank`, `old_live`, `received_power`, `received_live`, `received_captain_power`, `received_captain_live` from guild_race_rank_member">>).
-define(delete_guild_race_rank_member,
	<<"delete from guild_race_rank_member where `role_id` = ~p">>).
-define(delete_guild_race_rank_guild,
	<<"delete from guild_race_rank_member where `guild_id` = ~p">>).
-define(update_guild_race_rank_member_position,
	<<"update guild_race_rank_member set `position` = ~p where `role_id` = ~p">>).
-define(update_guild_race_rank_member_old_live,
	<<"update guild_race_rank_member set `old_live` = ~p where `role_id` = ~p">>).
-define(update_guild_race_rank_member_received_power,
	<<"update guild_race_rank_member set `received_power` = ~p where `role_id` = ~p">>).
-define(update_guild_race_rank_member_received_live,
	<<"update guild_race_rank_member set `received_live` = ~p where `role_id` = ~p">>).
-define(update_guild_race_rank_member_received_captain_power,
	<<"update guild_race_rank_member set `received_captain_power` = ~p where `role_id` = ~p">>).
-define(update_guild_race_rank_member_received_captain_live,
	<<"update guild_race_rank_member set `received_captain_live` = ~p where `role_id` = ~p">>).

%% 玩家和社团映射
-define(insert_guild_race_rank_role,
	<<"replace into guild_race_rank_role (`role_id`, `guild_id`) values ~ts">>).
-define(insert_guild_race_rank_role_value,
	<<"(~p,~p)">>).
-define(select_guild_race_rank_role,
	<<"select `role_id`, `guild_id` from guild_race_rank_role">>).

%% 从社团成员表获取团长Id
-define(select_guild_captain, <<"select id from guild_member where `position` = 1 and `guild_id` = ~p limit 1">>).

%% 团长任务
-define(insert_guild_race_rank_task,
	<<"replace into guild_race_rank_task (`guild_id`, `task_id`, `progress`, `status`) values (~p,~p,~p,~p)">>).
-define(select_guild_race_rank_task,
	<<"select `guild_id`, `task_id`, `progress`, `status` from guild_race_rank_task">>).
-define(update_guild_race_rank_task,
	<<"update guild_race_rank_task set `status`=~p where `guild_id`=~p and `task_id`=~p">>).
-define(delete_guild_race_rank_task,
	<<"delete from guild_race_rank_task where `guild_id`=~p">>).