%%----------------------------------------------------
%% @title 魅力沙滩头文件
%% @creator yxf
%% @date 20171106
%%----------------------------------------------------

%% 活动阶段
-define(BEACH_CLOSE,  0).    %% 海滩关闭阶段
-define(BEACH_READY,  1).    %% 海滩准备阶段
-define(BEACH_OPEN,   2).    %% 海滩活动进行阶段
-define(BEACH_REWARD, 3).    %% 海滩活动发奖励阶段

%% 加经验类型
-define(ADD_EXP_TYPE_TRIGGER, 1).  %% 前端触发
-define(ADD_EXP_TYPE_VOTE,    2).  %% 投票加经验

%% 活动相关配置
-define(LEAVE_BEACH, 0).        %% 离开海滩场景
-define(ACT_TYPE, 1).           %% 本服配置ID
-define(CAL_REWARD_TIME, 10).   %% 计算奖励时长
-define(PREVILEGE_ID, 1).       %% vip经验增加特权子id
-define(BEACH_OPEN_LV, 60).     %% 海滩开放等级
-define(OFF_TITLE,   4180001).       %% 离线发送奖励邮件标题
-define(OFF_CONTENT, 4180002).       %% 离线发送奖励邮件内容

-define (MB_PAGE_NUM, 10).  %% 海滩人员列表每页人数

-define(GIFT_TIMES, 5).     %% 初始赠送礼物次数
-define(SEND_GIFT, 0).      %% 赠送礼物
-define(GET_GIFT,  1).      %% 收到礼物

%% 传闻预定义
-define(READY_ACT_RUMORID,  1).  %% 活动准备传闻id
-define(START_ACT_RUMORID,  2).  %% 活动开始传闻id
-define(SEND_GIFT_RUMORID1, 3).  %% 赠送礼物传闻id
-define(SEND_GIFT_RUMORID2, 4).  %% 赠送礼物传闻id
-define(SEND_GIFT_RUMORID3, 5).  %% 赠送礼物传闻id
-define(SEND_GIFT_RUMORID4, 6).  %% 赠送礼物传闻id

% 海滩经验：y=48512*1.5^((x-170)/50))
% 约会经验：y=20794*1.5^((x-170)/50))
%% 经验增加
-define(ON_ENGAGE, 1).      %% 约会中的经验
-define(BASE_EXP(Lv), trunc(48512* math:pow(1.5, (Lv-170)/50))).      %% 基础经验
-define(ENGAGE_EXP(Lv), trunc(20794* math:pow(1.5, (Lv-170)/50))).    %% 约会经验

%% 跨服相关
-define(BF_BEACH_SCENE_ID, data_charm_beach:get_cfg(bf_scene)).      %% 本服海滩场景id
-define(KF_BEACH_SCENE_ID, data_charm_beach:get_cfg(kf_scene)).      %% 跨服海滩场景id
-define(BEACH_SCENE_ID, [?BF_BEACH_SCENE_ID, ?KF_BEACH_SCENE_ID]).   %% 海滩场景id列表
-define(ACT_TYPE_BF, 1).                %% 本服活动
-define(ACT_TYPE_KF, 2).                %% 跨服活动
-define(SCENE_ID(T), if T =:= ?ACT_TYPE_BF -> ?BF_BEACH_SCENE_ID; true -> ?KF_BEACH_SCENE_ID end).

-define(ONE_VOTE_CHARM, 1).    %% 一次投票增加的魅力值

-define(ROOM_POOL(Room), Room * 1000).  %% 每个房间的初始分线

%% ------------------------------------魅力沙滩功能记录------------------------------------

%% 活动状态记录
-record(beach_stage, {
    stage = 0,              %% 当前步骤 0-关闭 1-准备 2-进行中 3-发奖励
    act_type = 0,           %% 活动类型 1-本服 2-跨服
    scene = 0,              %% 场景id
    starttime = 0,          %% 活动开始时间戳
    endtime = 0,            %% 活动持续时长（秒）
    ref = [],               %% 计时器引用(活动定时器)
    ref1 = [],              %% 计时器引用1(创建氛围假人定时器,已弃用)
    members = #{},          %% 当前参与的玩家 #{role_id => room_id}

    room_pids = #{},        %% 记录房间对应的进程Id #{room => pid}
    room_maps = #{},        %% #{room => [{SerId, Node}]}
    room_lines = #{},       %% 收集房间内线路人数信息 #{room => [{scenepoolid, 线路人数}...]}
    cur_line = #{}          %% 每个房间可开辟的最新线路(场景的分线),上一已满分线+1(每个房间的分线为连续值,计算方式:room*1000+n)

    ,host_pid = []          %% 托管Pid
    ,host_ref = []          %% 托管定时器
}).

%% 活动状态记录
-record(beach_room_stage, {
    room_id = 0,            %% 房间id
    scene = 0,              %% 场景id
    pools_id = [],          %% 场景进程id(房间下的所有分线)
    stage = 0,              %% 当前步骤 0-关闭 1-准备 2-进行中 3-发奖励
    act_type = 0,           %% 活动类型 1-本服 2-跨服
    starttime = 0,          %% 活动开始时间戳
    endtime = 0,            %% 活动结束时间戳
    members = #{},          %% 当前参与的玩家 #{role_id => #beach_member{}}
    rank_list = [],         %% 排行榜list [{RoleId, [Rank,CharmValue]}...] CharmValue对应投票数
    % vote_list = [],         %% 投票列表 [#rec_vote{}]
    dummy = [],             %% #{pool => 0/1} 舞台氛围假人 0-未创建 1-已经创建
    offset_time = 0         %% 秘籍设置偏离时间
    }).

%% 参与活动玩家信息
-record(beach_member, {
    role_id = 0,            %% 玩家id
    node = [],              %% 玩家节点（跨服节点中需要用到）
    figure = undefined,     %% 玩家形象
    scene = 0,              %% 场景id 0-不在场景内
    scene_pool = 0,         %% 所处分线
    server_id = 0,          %% 玩家区服
    server_num = 0,         %% 玩家服数
    acc_exp = 0,            %% 累计经验
    pre_time = 0,           %% 上次获取经验时间戳 0-还没有获取过经验
    exp_reward_time = 0,    %% 已获取经验的时间（超过一定时间不可再获得经验）
    result = undefined,     %% 结果 缓存到退出场景才发送
    % members_page_index = 1, %% 海滩人员列表序号
    vote_times = 0,         %% 投票次数
    buy_times = 0,          %% 购买投票次数
    voted_ids = [],         %% 已投票的id列表
    vote_role = [],         %% 为我投票的玩家id列表[{role_id, vote_count, server_id, is_friend}...]
    charm_value = 0         %% 总魅力值(用于服务端计算排名,每次投票增加一点魅力值)
    ,is_hosting = 0         %% 是否托管
    }).

%% 投票信息(已废弃)
-record(rec_vote, {
    key = {},               %% {role_id, vote_id}保证投票信息唯一性
    vote_id = 0,            %% 投票者id（可能同个玩家有多条投票）
    role_id = 0,            %% 玩家id
    name = "",              %% 玩家名
    server_id = 0,          %% 玩家区服
    count = 0,              %% 投票次数
    stick_time = 0          %% 上一次置顶(投票)时间
    }).

%% 房间信息(已废弃)
-record(room_state, {
    room_id = 0,            %% 房间id (pid)
    pool_id = 0,            %% 场景进程id
    members_num = 0         %% 房间人数
    }).


%% ------------------------------------魅力沙滩配置记录------------------------------------

%% 活动配置
-record(base_beach_act_cfg, {
    id = 0,                 %% 配置类型
    start_time = 0,         %% 每天活动开放时间点
    ready_time = 0,         %% 活动开始前准被时长（秒）
    interval = 0,           %% 增加经验间隔
    duration = 0,           %% 活动持续时长（秒）
    cal_time = 0,           %% 结算奖励时长
    kf_min_day = 0,         %% 开服后多少天跨服
    buy_cost = 0,           %% 购买赠送次数消耗物品
    scene_id = 0            %% 场景id
    }).

%% 魅力值排行榜奖励配置
-record(base_beach_reward, {
    rank_ll = 0,             %% 排名下限
    rank_ul = 0,             %% 排名上限
    reward = []              %% 奖励内容
    }).

%% 经验配置
-record(base_beach_exp, {
    level = 0,              %% 玩家等级
    timer_add_exp = 0,      %% 每5秒增加经验值
    vote_add_exp = 0        %% 投票增加经验值
}).

%% 假人配置
-record(base_beach_dummy, {
    id = 0,                 %% Id
    sex = 0,                %% 性别
    location = "",          %% 坐标
    model = [],             %% 模型
    fashion_model = [],     %% 时装模型
    name = ""               %% 名字
}).

%% 发言操作类型配置
-record(base_beach_voice, {
    type = 0,               %% 操作类型
    cd   = 0,               %% 发言间隔
    base_id = 0,            %% 文案库Id
    desc    = ""            %% 描述说明
}).

%% 发言文案配置
-record(base_beach_voice_content, {
    base_id    = 0,         %% 文案库Id
    content_id = 0,         %% 文案Id
    content = ""            %% 文案内容
}).