%%-----------------------------------------------------------------------------
%% @Module  :       red_envelopes
%% @Author  :       Czc
%% @Email   :       389853407@qq.com
%% @Created :       2017-09-20
%% @Description:    红包
%%-----------------------------------------------------------------------------

%% ------------------- 进程字典 --------------------
-define(PID, mod_red_envelopes).
-define(P_RED_ENVELOPES, "P_Red_Envelopes").                % #{红包类型=>#{所属id=>[#red_envelopes{}]}}
-define(P_RED_ENVELOPES_RECORD, "P_Red_Envelopes_Record").  % #{红包类型=>#{所属id=>[#obtain_record{}]}}

%% ------------------- 红包类型 --------------------
%% 增加新的触发类型如果有次数限制需要在对应的次数配置里面增加次数id需跟配置触发id一样
-define(RED_ENVELOPES_TYPE_VIP,        1).              % 提升vip等级赠送的红包
-define(RED_ENVELOPES_TYPE_RECHARGE,   2).              % 累充赠送的红包
-define(RED_ENVELOPES_TYPE_WORLD_BOSS, 3).              % 世界boss红包
-define(RED_ENVELOPES_TYPE_INVESTMENT, 4).              % 投资

-define(RED_ENVELOPES_TYPE_GOODS, 99).                  % 红包道具（为了做处理）
-define(RED_ENVELOPES_TYPE_VIP_PLAYER_SEND, 100).       % VIP红包（为了做处理）
-define(RED_ENVELOPES_TYPE_BONFIRE, 101).               % 篝火红包（为了做处理）

%% ------------------- 对红包类型的归类 --------------------
-define(SYSTEM_RED_ENVELOPES, 1).           % 系统赠送的红包
-define(GOODS_RED_ENVELOPES, 2).            % 道具红包
-define(VIP_RED_ENVELOPES, 3).              % VIP玩家红包
-define(GUILD_BONFIER_ENVELOPES, 4).        % 篝火红包

%% ------------------- 红包归属类型 --------------------
-define(GUILD_RED_ENVELOPES, 1).            % 公会红包
-define(ACT_RED_ENVELOPES,      2).         % 定制活动红包

%% ------------------- 红包状态 --------------------
-define(NO_SEND, 0).                        % 未发送 (现在都是自动发送，该状态暂时不存在)
-define(HAS_SEND, 1).                       % 已发送
-define(END, 2).                            % 已领完
-define(EXPIRED, 3).                        % 已过期

%% ------------------- 领取状态 --------------------
-define(CAN_RECEIVE, 1).                    % 可领取
-define(CAN_NOT_RECEIVE, 2).                % 不可领取
-define(HAS_RECEIVE, 3).                    % 已领取

%% ------------------- 系统红包触发周期 --------------------
-define(NO_TIMES_LIMIT, 0).                 % 不限次数
-define(LIFELONG, 1).                       % 终身
-define(WEEK, 2).                           % 每周
-define(DAILY, 3).                          % 每天

%% ------------------- 通知客户端刷新的类型 ----------------
-define(NEW_RED_ENVELOPES, 1).              % 有新红包可领

%% ------------------- 其他宏 --------------------

-define(DEL_AF_SEND_TIME, 172800).           % 红包发送多久后自动过期删除

-define(RAND_MONEY_TYPE,   1).              % 红包随机分配类型(总金额按份数随机分配)
-define(FULL_MONEY_TYPE,   2).              % 红包满分配类型(总金额都分配)

%% 红包
-record(red_envelopes, {
    id = 0,
    type = 0,                               % 红包类型
    packet_id = 0,                          % 红包配置id
    ownership_type = 0,                     % 1: 公会红包（现在只有1）
    ownership_id = 0,                       % 公会id
    owner_id = 0,                           % 红包拥有者玩家id
    status = 0,                             % 红包状态
    money = 0,                              % 红包额度
    split_num = 0,                          % 红包的拆分数量
    recipients_num = 0,                     % 已领取人数
    recipients_lists = [],                  % 领取的玩家数据列表 [#recipients_record{}]
    money_list = [],                        % 拆分的红包金额 [金额]
    share_list = [],                        % 可领取玩家id
    has_look_lists = [],                    % 已查看玩家id[]
    greet = "",                             % 红包祝福语
    stime = 0,                              % 红包发送时间
    ctime = 0                               % 红包获得时间
    }).

%% 领取记录
-record(recipients_record, {
    role_id = 0,                            % 玩家id
    red_envelopes_id = 0,                   % 红包id
    % figure = undefine,                      % 玩家形象
    money = 0,                              % 领取的额度
    time = 0                                % 时间
    }).
%% ------------------- 配置 -------------------
%% 触发条件获得红包的配置
% -record(red_envelopes_cfg, {
%     id = 0,
%     type = 0,                   % 红包子类型
%     ownership_type = 0,         % 1: 公会红包
%     name = <<>>,                % 红包名字
%     desc = <<>>,                % 描述
%     greetings = <<>>,           % 祝福语
%     trigger_interval = 0,       % 1: 终身 2: 每周 3: 每日
%     trigger_times = 0,          % 触发次数
%     condition = [],             % 获得红包的条件
%     money = 0,                  % 额度
%     min_num = 0                 % 最小红包个数
%     }).

-record(base_red_envelopes_cfg, {
    id = 0,
    type = 0,                   % 红包子类型
    name = "",                  % 红包名字
    greetings = <<>>,           % 祝福语
    trigger_interval = 0,       % 1: 终身 2: 每周 3: 每日
    condition = [],             % 获得红包的条件
    kind  = 1,                  % 货币类型
    money = 0,                  % 额度
    num = 0                     % 最小红包个数
    }).

-record(base_vip_red_envelopes_cfg,{
    id = 0,
    min_vip = 0,
    max_vip = 0,
    name = "",                  % 红包名字
    money = 0,
    num = 0
    }).

-record(base_bonfire_red_envelopes_cfg,{
    boss_id = 0,
    name = "",                  % 红包名字
    greetings = <<>>            % 祝福语
    }).

%% 红包道具配置
-record(red_envelopes_goods_cfg, {
    goods_id = 0,               % 物品类型id
    ownership_type = 0,         % 见红包归属类型
    name = <<>>,                % 红包名字
    desc = <<>>,                % 描述
    greetings = <<>>,           % 祝福语
    money_type = 0,             % 货币类型
    money = 0,                  % 额度
    min_num = 0,                % 拆分个数
    times_lim = 0               % 使用次数限制
    }).

%% ------------------- 数据库 --------------------
-define(sql_select_red_envelopes,
    <<"select id, type, ownership_type, ownership_id, owner_id, status,
    money, money_list, share_list, split_num, extra, greet, stime, ctime from red_envelopes">>).
-define(sql_select_recipients_record,
    <<"select role_id, red_envelopes_id, money, time from red_envelopes_recipients_record">>).
-define(sql_insert_red_envelopes,
    <<"insert into red_envelopes(id, type, ownership_type, ownership_id, owner_id, status, money, money_list, share_list, split_num,
        extra, greet, stime, ctime) values(~p, ~p, ~p, ~p, ~p, ~p, ~p, '~s', '~s', ~p, ~p, '~s', ~p, ~p)">>).
-define(sql_insert_recipients_record,
    <<"insert into red_envelopes_recipients_record(role_id, red_envelopes_id, ownership_id, money, stime, time)
        values(~p, ~p, ~p, ~p, ~p, ~p)">>).
-define(sql_update_red_envelopes_money_list,
    <<"update red_envelopes set money_list = '~s' where id = ~p">>).
-define(sql_update_red_envelopes_status,
    <<"update red_envelopes set status = ~p, stime = ~p, money_list = '~s' where id = ~p">>).
-define(sql_update_red_envelopes_status1,
    <<"update red_envelopes set status = ~p, stime = ~p where id = ~p">>).

% -define(sql_update_red_envelopes_status_and_split_num,
%     <<"update red_envelopes set status = ~p, split_num = ~p, stime = ~p where id = ~p">>).
-define(sql_del_red_envelopes_by_guild_id_and_role_id,
    <<"delete from red_envelopes where ownership_id = ~p and owner_id = ~p">>).
-define(sql_del_red_envelopes_by_guild_id,
    <<"delete from red_envelopes where ownership_id = ~p">>).
-define(sql_del_red_envelopes_by_ownership_type_and_id,
    <<"delete from red_envelopes where ownership_type = ~p and ownership_id = ~p">>).
-define(sql_del_red_envelopes_by_stime,
    <<"delete from red_envelopes where status > 0 and stime <= ~p">>).
-define(sql_del_red_envelopes_recipients_record_by_stime,
    <<"delete from red_envelopes_recipients_record where stime <= ~p">>).
-define(sql_del_red_envelopes_by_ownership_id,
    <<"delete from red_envelopes where ownership_id = ~p">>).
-define(sql_del_red_envelopes_record_by_ownership_id,
    <<"delete from red_envelopes_recipients_record where ownership_id = ~p">>).
