%% ---------------------------------------------------------------------------
%% @doc 跨服帮战头文件.
%% @author zhaoyu
%% @since  2018-08-27
%% ---------------------------------------------------------------------------

-ifdef(DEV_SERVE).
    -define(SYNC_SWITCH,30000).
-else.
    -define(SYNC_SWITCH,600000).
-endif.

-define(SQL_CGWAR_GUILD_ROOM, <<"SELECT `guild_id`,`room` FROM `guild_cgwar_room`">>).
-define(SQL_CGWAR_ROOM_UPDATE,<<"REPLACE INTO `guild_cgwar_room` (`guild_id`,`room`) VALUES (~p,~p)">>).
-define(SQL_CGWAR_LAST_ZONE_UPDATE,"REPLACE INTO `cross_guild_war_last_zone` (`server_id`,`zone_id`,`fact_id`)").
-define(SQL_CGWAR_LAST_ZONE_GET, "SELECT  `server_id`, `zone_id`,`fact_id` FROM `cross_guild_war_last_zone`").
-define(SQL_CGWAR_CITY_GET, "SELECT `zone_id`, `city_id`, `server_id`, `server_num`, `guild_id`, `guild_name`, `guild_power`, `chief_id`,`chief_name`, `chief_power` from `cross_guild_war_city_info`").
-define(SQL_CGWAR_CITYS_SAVE, "REPLACE INTO `cross_guild_war_city_info` (`zone_id`, `city_id`, `server_id`, `server_num`, `guild_id`, `guild_name`,`guild_power`,`chief_id`, `chief_name`,`chief_power`) values ~ts").
-define(SQL_CGWAR_GUILD_INFO_GET, "SELECT `guild_id`, `zone_id`, `server_id`, `server_num`, `guild_name`, `guild_power`, `chief_id`, `chief_name`, `chief_power`,`sign_ups`,`supports`, `support_num` from `cross_guild_war_guild_info`").
-define(SQL_CGWAR_GUILD_HELP_INFO_GET, "SELECT `guild_id`, `zone_id`, `server_id`,`help_ups` from `cross_guild_war_guild_help_info`").
-define(SQL_CGWAR_GUILD_INFO_SAVE,"REPLACE INTO `cross_guild_war_guild_info` (`guild_id`,`zone_id`, `server_id`, `server_num`, `guild_name`,`guild_power`, `chief_id`, `chief_name`,`chief_power`, `sign_ups`,`supports`,`support_num`) values ~ts").
-define(SQL_CGWAR_GUILD_HELP_INFO_SAVE,"REPLACE INTO `cross_guild_war_guild_help_info` (`guild_id`,`zone_id`, `server_id`, `help_ups`) values ~ts").
-define(SQL_CGWAR_GUILD_INFO_DEL_BY_ZONE, "DELETE FROM `cross_guild_war_guild_info` WHERE `zone_id` = ~p").
-define(SQL_CGWAR_ROLE_GET,"select support_num, support_time, use_free_num, city_award, award_time,last_sign from cross_guild_war_role where role_id = ~p").
-define(SQL_CGWAR_ROLE_SAVE, "replace into cross_guild_war_role (role_id, support_num, support_time,use_free_num, city_award, award_time,last_sign) values (~p, ~p, ~p, ~p, '~ts', ~p, ~p)").

-define(SQL_CGQWAR_LOG_GET,"SELECT * FROM `log_cgwar_city_info`").
-define(SQL_CGQWAR_LOG_SAVE,"REPLACE INTO `log_cgwar_city_info` (`zone_id`,`city_id`,`server_id`,`server_num`,`guild_id`,`guild_name`,`guild_power`,`chief_id`,`chief_name`,`chief_power`,`time`,`chief_info`) values ~ts").

-define(SQL_SELECT_OVERLORD,"SELECT times, pro_time, rename_time, buy_time FROM `overlord_info` where `role_id` = ~p").
-define(SQL_REPLACE_OVERLORD,"replace into overlord_info (role_id, times, pro_time, rename_time, buy_time) values (~p, ~p, ~p, '~ts', ~p)").
-define(SQL_TRUNCATE_OVERLORD,"truncate table overlord_info").


%% 跨服帮战-分区信息ets。保存数据格式:[#cgw_zone_info{}]
-define(CGW_ZONES_ETS, cgw_zones_ets).
%% 跨服帮战-上一次分区信息ets。保存数据格式:[#cgw_zone_info{}]
-define(CGW_LAST_ZONES_ETS, cgw_last_zones_ets).
%% 跨服帮战-城池占领信息ets。保存数据格式:[#cgw_zone_city_info{}]
-define(CGW_CITY_ETS, cgw_city_ets).

-define(CGW_CITY_LOG_ETS, cgw_city_log_ets).

%% 跨服帮战-帮派与战场pid()对应关系信息ets。保存数据格式:[#cgw_guild_battlefield_info{}]
-define(CGW_GUILD_BATTLEFIELD_PID, cgw_guild_battlefield_pid).

%% 保存各个游戏服公会争霸S级帮派列表以及举办次数
%% 保存数据格式:[#cgw_server_info{}]。数据由各个游戏服同步过来。
-define(CGW_CAN_JOIN_ETS, cgw_can_join_ets).


-define(CGW_ST_IDLE,        0). %idle
-define(CGW_ST_SIGN,        1). %报名期间
-define(CGW_ST_SUPPORT,     2). %应援阶段
-define(CGW_ST_PK,          3). %活动期间
-define(CGW_ST_OVER,        4). %活动结束

% 城池类型
-define(CITY_TYPE_MAIN, 1). %% 主城
-define(CITY_TYPE_SIDE, 2). %% 卫城

% 怪物类型
-define(MON_TYPE_FLAG , 1). %% 战旗
-define(MON_TYPE_MON,   2). %% 守护兽

%% 刷新战场信息间隔
-define(BROADCAST_BATTLEFIELD_TIMEOUT,   (5 * 1000)).


%% 跨服帮战时间配置
-record(cross_guild_war_config, {
    week_list = []                              %% 表示周几开
    ,sign_up_period = {{0,0,0}, {0,0,0}}        %% 报名时间段
    ,support_period = {{0,0,0}, {0,0,0}}        %% 应援时间段
    ,battle_period = {{0,0,0}, {0,0,0}}         %% 战场时间段
    }
).


%% 跨服帮战场景配置
-record(cross_guild_war_city, {
    id = 0                                      %% 城池Id
    ,name = <<>>                                %% 城池名称
    ,type_id = 2                                %% 城池类型，1为主城，2为卫城
    ,born_point = {0, 0}                        %% 出生点:{posX,posY}
    ,revive_point = {0, 0}                      %% 复活点:{posX,posY}
    ,flag = {0, 0, 0}                           %% 战旗:{怪物id,posX,posY}
    ,mon_list = []                              %% 将军(怪物列表):[{怪物id,posX,posY},{},…]
    }).


%% 分区信息
-record(cgw_zone_info, {
    zone_id = 0                                 %% 分区Id
    ,server_id = 0                              %% 游戏服ServerId
    ,time = 0                                   %% 进行分区的时间戳
}).

%% 分区帮派报名/援助信息
-record(cgw_zone_guild_info, {
    zone_id = 0                                 %% 分区Id
    ,guild_list = []                            %% 帮派信息[#cgw_guild_info{}]
}).


%% 分区城池占领信息
-record(cgw_zone_city_info, {
    zone_id = 0                                 %% 分区Id
     ,city_info = []                            %% 城池占领信息[#cgw_city_owner_info{}]
}).

%% 分区城池占领信息日志
-record(cgw_zone_city_log, {
    zone_id = 0                                 %% 分区Id
    ,times_citys = []                           %% 多次数据 [#times_city{}]
}).

-record(times_citys, {
    time = 0,
    city_info = []                             %% 城池占领信息[#cgw_city_owner_info{}]
}).


%% 城池占领信息
-record(cgw_city_owner_info, {
    zone_id = 0                                 %% 分区Id
    ,city_id = 0                                %% 城池Id
    ,server_id = 0                              %% 游戏服ServerId
    ,server_num = 0                             %% 游戏服编号(玩家看到的服数)
    ,guild_id = 0                               %% 帮派Id
    ,guild_name = <<>>                          %% 帮派名称
    ,guild_power = 0                            %% 帮派战力
    ,chief_id = 0                               %% 帮主Id
    ,chief_name = <<>>                          %% 帮主名称
    ,chief_power = 0                            %% 帮主战力
    ,time = 0                                   %% 战报需要
    ,chief_info = []                            %% #rec_picture{}
}).

%% 帮派信息
-record(cgw_guild_info, {
    guild_id = 0                                %% 帮派Id
    ,guild_name = <<>>                          %% 帮派名称
    ,server_id = 0                              %% 游戏服ServerId
    ,server_num = 0                             %% 游戏服编号(玩家看到的服数)
    ,zone_id = 0                                %% 分区Id
    ,fact_id = 0                                %% 阵营Id
    ,init_city = 0                              %% 初始城区

    ,guild_power = 0                            %% 帮派战力
    ,chief_id = 0                               %% 帮主Id
    ,chief_name = <<>>                          %% 帮主名称
    ,chief_power = 0                            %% 帮主战力
    ,chief_info = []                            %% #rec_picture{}

    ,sign_ups = []                              %% 报名列表[#cgw_role_info{}]
    ,help_ups = []                              %% 外援列表[#cgw_role_info{}]
    ,supports = []                              %% 支援列表[{ServerId,RoleId}]
    ,support_num = 0                            %% 支援人数

    %% 下面的字段是实时战场数据不保存数据库
    ,own_cities = []                            %% 占领的城池列表[CityId]
    ,born_pos = {0, 0}                          %% 出生点
    ,revive_pos = {0, 0}                        %% 复活点
    ,battle_pos = {0, 0}                        %% 战斗挂机点
    ,group = 0                                  %% 战斗分组
    }
).

%% 报名角色信息
-record(cgw_role_info, {
    role_id = 0                                 %% 角色Id
    ,name = <<>>                                %% 角色名
    ,server_id = 0                              %% 服务器Id
    ,power = 0                                  %% 战力
    ,lev = 0                                    %% 等级
    ,sex = 0
    ,vip = 0                                    %% Vip等级
    ,sup_vip = 0
    ,position = 0                               %% 职位
    }
).

%% 应援角色信息
-record(cgw_support, {
    role_id = 0                                 %% 角色Id
    ,server_id = 0                              %% 服务器Id
    ,num = 0                                    %% 次数
}).

%% 跨服帮战管理进程state
-record(cgw_mgr_state, {
    ser2zone = #{}                              %% 按ServerId查询ZoneId的索引数据
    ,ser2fact = #{}                              %% 按ServerId查询FacID
    ,last_ser2zone = #{}                        %% 上回按ServerId查询ZoneId的索引数据
    ,last_ser2fact = #{}                        %% 上回按ServerId查询fact_id的索引数据
    ,ref = 0                                    %% 定时器
    ,process  = 0                               %% 0闲置1报名2活动3已结束
    ,end_time = 0                               %% 状态结束时间
    ,battle_result = []                         %% 各个战场战斗返回结果[#cgw_zone_city_info{}]
}).

%%时间管理
-record(cgwar_time_mgr, {
    state = 0,     %%0闲置1报名2活动3已结束
    etime = 0,     %%截止有效
    ref   = 0
}).

%%本地时间管理
-record(cgwar_local_mgr, {
    switch = 1,    %%活动开关
    state = 0,     %%0闲置1报名2活动3已结束
    etime = 0      %%截止有效
}).

%% 跨服帮战战场进程state
-record(cgw_battlefield_state, {
    zone_id = 0                                 %% 分区Id
    ,pool_id = 0                                %% 场景分线Id
    ,cities = []                                %% 城池信息[#cgw_city_info{}]
    ,guild_list = []                            %% 参与的帮派Id列表
    ,group = #{}                                %% 参与的分组列表
    ,ref = 0                                    %% 战场结束定时器
    ,broadcast_ref = 0                          %% 刷新战场信息定时器
}).

%% 城池信息
-record(cgw_city_info, {
    city_id = 0                                 %% 城池Id
    ,group = 0                                  %% 占领城池的分组
    ,owner = 0                                  %% 占领城池的帮派Id
    ,owner_name = <<>>                          %% 占领城池的帮派名字
    ,flag_uid = 0                               %% 战旗怪物唯一Id
    ,flag_hp = 0                                %% 战旗怪物血量
    ,flag_total_hp = 0                          %% 战旗怪物总血量
    ,mon_uids = []                              %% 所有守护怪的唯一Id列表[MonUid]
    ,type = 0                                   %% 城池类型
}).


%% 参战角色信息
-record(cgw_role_battle_info, {
    role_id = 0                                 %% 角色Id
    ,name = <<>>                                %% 角色名
    ,server_id = 0                              %% 服务器Id
    ,guild_id = 0                               %% 帮派Id
    ,group = 0                                  %% 分组
    ,scene = 0                                  %% 当前所在场景 0:表示已经退出活动场景
}).

-record(cgw_server_info, {
     zone_id = 0                                 %% 服务器Id
    ,guild_list = []                            %% 帮派列表[#cgw_guild_info{}]
}).

%% 帮派与战场pid()对应关系信息
-record(cgw_guild_battlefield_info, {
    guild_id = 0                                %% 帮派Id
    ,pid = 0                                    %% 战场pid()
}).

%% 角色跨服帮战应援和领取奖励记录
-record(role_cgw, {
    support_num = 0                             %% 应援次数
    ,use_free_num = 0                           %% 已使用免费应援次数
    ,support_time = 0                           %% 最近一次应援时间戳
    ,city_award = []                            %% 领取占领城池奖励记录[{RoomId, CityId}]
    ,award_time = 0                             %% 最近一次领取占领城池奖励时间戳
    ,last_sign  = 0                             %% 上次报名时间
}).

%% 应援结算传递参数
-record(support_settlement, {
    role_id = 0                                 %% 角色Id
    ,guild_id = 0                               %% 帮派Id
    ,guild_name = 0                             %% 帮派名字
    ,cities = []                                %% 占领的城池Id
    ,num = 0                                    %% 应援这个帮派的次数
}).

%% 霸主特权数据
-record(overlord_info, {
    prohibit_times = 0                          %% 禁言次数
    ,pro_time      = 0                          %% 上次使用禁言特权时间
    ,rename_time   = []                         %% 上次改名时间[{Fid,Time}]
    ,buy_time      = 0                          %% 上次购买时间
}).

%% 霸主限购配置
-record(overlord_buy_cfg, {
    phase = 0                                   %% 期数
    ,reward = []                                %% 限购奖励
    ,cost = []                                  %% 限购价格
    ,display = []                               %% 展示资源
}).
