%% ---------------------------------------------------------------------------
%% @doc relationship.hrl

%% @author hjh
%% @since  2016-12-06
%% @deprecated 关系
%% ---------------------------------------------------------------------------

%% 常量配置参数
-define(RELA_NUM_LIMIT,   1).
-define(COUPON_SEND_CONF, 2).
-define(COUPON_GIFT_CONF, 3).

%% 玩家关系缓存
-define(ETS_ROLE_RELA, ets_role_rela).      %% 缓存玩家关系和请求状态
-define(UPDATE_RELA,            1).         %% 更新关系
-define(UPDATE_RESPONSE_STATUS, 2).         %% 更新好友回应状态

%% 人数上限
-define(FRIEND_NUM_LIMIT, data_rela:get_rela_value(?RELA_NUM_LIMIT)).     %% 好友数量上限
-define(NEARLLY_NUM_LIMIT, data_rela:get_rela_value(?RELA_NUM_LIMIT)).    %% 最近联系人名单上限

%% 推荐好友参数
-define(RECOMMENDED_ROLE_POOL,     30).             %% 推荐池
-define(RECOMMENDED_SEARCH_CD,     5).              %% 推荐列表刷新CD
-define(RECOMMENDED_LIST_MAX_LEN,  10).             %% 推荐好友显示最大数量
-define(RECOMMENDED_OPPOSITE_ROLE, 7).              %% 异性推荐人数

%% 社交删增操作通知类别
-define(RELA_UPDATE_REMOVE, 0).                     %% 从社交列表移除玩家
-define(RELA_UPDATE_ADD,    1).                     %% 从社交列表增加玩家

%% 回复好友申请类型
-define(REPLY_TYPE_REFUSE,      0).                 %% 拒绝
-define(REPLY_TYPE_AGREE,       1).                 %% 同意
-define(REPLY_TYPE_PULL_BLACK,  2).                 %% 拉黑

%% 好友申请处理状态
-define(ASK_RESPONSE_SUSPEND,      0).              %% 挂起不理会
-define(ASK_RESPONSE_REFUSE,       1).              %% 拒绝
-define(ASK_RESPONSE_AGREE,        2).              %% 同意

%% 好友请求有效时间
-define(FRIEND_ASK_VAILD_TIME, 86400).              %% 过期的在玩家登陆或者服务器重启时会清理掉

%% 获得亲密度的方式
%% 类型1000之前的为后台配置亲密度获得方式配置的类型,其他类型从1000之后开始
-define(INTIMACY_TYPE_DUN,          1).             %% 各类副本
-define(INTIMACY_TYPE_MON,          2).             %% 各类怪物

-define(INTIMACY_TYPE_PRESENT,      1000).          %% 赠送物品
-define(INTIMACY_TYPE_SHOW_LVE,     1001).          %% 秀恩爱
-define(INTIMACY_TYPE_CLEAN,        1002).          %% 清空


%% 社交关系类别(查询和更新使用)
-define(RELA_LIST_TYPE_FRIEND,  1).                 %% 好友列表
-define(RELA_LIST_TYPE_FETTERS, 2).                 %% 羁绊列表
-define(RELA_LIST_TYPE_ENEMY,   3).                 %% 仇人列表
-define(RELA_LIST_TYPE_BLACK,   4).                 %% 黑名单,非正式社交类别,供限制聊天使用
-define(RELA_LIST_TYPE_RECENT_CHAT,     5).         %% 最近联系
-define(RELA_LIST_TYPE_SINGLE_FRIEND,   6).         %% 单向好友列表

%% 社交关系操作
-define(RELA_DEL_FRIEND,    1).                       %% 删除好友
-define(RELA_DEL_FETTERS,   2).                       %% 删除羁绊
% -define(RELA_ADD_BLACK,  2).                        %% 拉黑
% -define(RELA_DEL_BLACK,  3).                        %% 取消拉黑
% -define(RELA_DEL_ENEMY,  4).                        %% 删除仇人

%% ---------------- 关系类型定义(关系唯一,不会同时存在两条关系数据,存于数据库中) ------------------------------
-define(RELA_TYPE_NONE,                  0).          %% 没有关系
-define(RELA_TYPE_FRIEND,                1).          %% 好友
-define(RELA_TYPE_FETTERS,               2).          %% 羁绊(实际db存储的数据还是1-好友关系)
% -define(RELA_TYPE_ENEMY,                 3).        %% 仇人
% -define(RELA_TYPE_BLACK,                 4).        %% 黑名单
-define(RELA_TYPE_SINGLE_FRIEND,         6).          %% 单向好友

-define(RELA_FRIEND_TYPES,  [?RELA_TYPE_FRIEND]).
-define(RELA_FETTERS_TYPES, [?RELA_TYPE_FETTERS]).
-define(RELA_SINGLE_FRIEND_TYPES, [?RELA_TYPE_SINGLE_FRIEND]).
% -define(RELA_BLACK_TYPES,   [?RELA_TYPE_BLACK]).
% -define(RELA_ENEMY_TYPES,   [?RELA_TYPE_ENEMY]).
%% -----------------------------------------------------------------------

%% --------------------------关系操作(日志)-----------------------------
-define(ADD_FRIEND,         1).     %% 同意添加好友
-define(BE_ADD_FRIEND,      2).     %% 被同意添加好友
-define(DEL_FRIEND,         3).     %% 删除好友
-define(BE_DEL_FRIEND,      4).     %% 被删除好友
-define(ADD_BLACK,          5).     %% 拉黑
-define(BE_ADD_BLACK,       6).     %% 被拉黑
-define(DEL_BLACK,          7).     %% 取消拉黑
-define(ADD_FETTERS,        8).     %% 自动添加羁绊
-define(DEL_FETTERS,        9).     %% 移除羁绊

%% ---------------------------玩家进程定义--------------------------------
-define(RELAS_KEY,                              relas).     %% 进程字典
-define(FRIEND_ASK_LIST,         rela_friend_ask_list).     %% 好友请求列表
-define(FRIEND_RECOMMEND_LIST,  rela_recommended_list).     %% 好友推荐列表
-define(FRIEND_SEARCH_TIME,     rela_last_search_time).     %% 好友推荐列表最后刷新时间
-define(LAST_RELA_LIST,                last_rela_list).           %% 最近联系人列表
%% -----------------------------------------------------------------------

%% 最近联系人上限
-define(LAST_RELA_CHAT_LIMIT, 10).

-record(intimacy_lv_cfg, {
    lv = 0,
    color = 0,
    name = "",
    intimacy = 0,
    attr = []
    }).

-record(intimacy_obtain_cfg, {
    type = 0,                           %% 亲密度获得类型
    trigger_obj = 0,                    %% 触发对象id
    intimacy = 0,                       %% 增加亲密度
    times = 0                           %% 次数限制 4点重置
    }).

%% 关系记录(玩家进程)
-record(rela, {
    role_id = 0,            % 玩家id
    other_rid = 0,          % 关系另一方的玩家id
    rela_type = 0,          % 关系类型
    intimacy = 0,           % 亲密度
    contribute = 0,         % 本方的亲密度贡献
    last_chat_time = 0,     % 最后聊天时间
    last_chat_utime = 0,    % 最后聊天的数据库更新时间
    ctime = 0               % 关系记录创建时间
    }).

%% 好友请求
-record(friend_ask, {
    role_id = 0,
    ask_id = 0,
    time = 0
    }).


%% 最近联系人(人物进程内)|初步限制在10人以内
-record(last_rela_chat, {
    role_id = 0,                %% 玩家id
    other_id = 0,               %% 对方id
    time = 0                    %% 最近聊天时间
    }).

%% 每日社交票券
-record(role_rela_coupon, {
    id = 0,                     %% 玩家id
    send_list = [],             %% 今日已赠送列表
    send_time = 0,              %% 今日最新赠送时间
    gift_list = [],             %% 今日已领取列表 [{FromId, State},...]
    gift_time = 0               %% 今日最新领取&接收时间
    }).

%% 玩家在对方所处的关系状态
-record(ets_role_rela, {
    key         = {0, 0} %% {RoleId, OppoId}
    ,rela       = 0      %% 我(RoleId)在对方所处的关系状态
    ,res_status = 0      %% 回复请求加好友状态
}).

%% 计数器类型
-define(RELA_COUPON_SEND, 1).
-define(RELA_COUPON_GIFT, 2).

%% 票券状态
-define(COUPON_RECEIVING, 0).
-define(COUPON_RECEIVED,  1).

%% 票卷类型
-define(COUPON_FRIEND, 1).
-define(COUPON_MATE,   2).

%% 亲密度增加类型
%% 亲密度增加时统计贡献度使用
-define(ACTIVE_CON, active_contribute).
-define(PASS_CON, passive_contribute).

-define(sql_rela_select_by_role_id,
    <<"select role_id, other_rid, rela_type, intimacy, contribute, last_chat_time, ctime from relationship where role_id = ~p">>).
-define(sql_single_rela_select_by_role_id,
    <<"select role_id, other_rid, rela_type, intimacy, contribute, last_chat_time, ctime from relationship where other_rid = ~p">>).
-define(sql_rela_select_rela_type_from_other,
    <<"select rela_type from relationship where role_id = ~p and other_rid = ~p">>).
-define(sql_rela_select_by_rid_and_oid,
    <<"select role_id, other_rid, rela_type, intimacy, contribute, last_chat_time, ctime from relationship where role_id = ~p and other_rid = ~p">>).
% -define(sql_rela_select_by_rid_and_type,
%     <<"select role_id, other_rid, rela_type, intimacy, contribute, last_chat_time, ctime from relationship where role_id = ~p and rela_type = ~p">>).
% -define(sql_rela_insert,
%     <<"insert into relationship (from_id, to_id, rela_type, ctime) values(~p, ~p, ~p, ~p)">>).
-define(sql_update_last_chat_time,
    <<"update relationship set last_chat_time = ~p where (role_id = ~p and other_rid = ~p) or (other_rid = ~p and role_id = ~p)">>).

-define(sql_del_out_time_friend_ask_by_role_id,
    <<"delete from rela_friend_ask where time < ~p and role_id = ~p">>).
-define(sql_get_friend_ask_by_role_id,
    <<"select role_id, ask_id, time from rela_friend_ask where role_id = ~p">>).
-define(sql_get_friend_ask_by_oppo_role_id,
    <<"select role_id, ask_id, time from rela_friend_ask where role_id = ~p and ask_id = ~p">>).
-define(sql_add_friend_ask,
    <<"replace into rela_friend_ask(role_id, ask_id, time) values(~p, ~p, ~p)">>).
-define(db_del_friend_ask_by_asker_id,
    <<"delete from rela_friend_ask where role_id = ~p and ask_id = ~p">>).
-define(db_del_one_role_all_friend_ask,
    <<"delete from rela_friend_ask where role_id = ~p">>).

-define(sql_save_role_rela,
    <<"replace into relationship (role_id, other_rid, rela_type, intimacy, contribute, last_chat_time, ctime) values(~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).
-define(sql_del_role_rela,
    <<"delete from relationship where role_id = ~p and other_rid = ~p">>).
-define(sql_update_intimacy,
    <<"update relationship set intimacy = ~p, contribute = ~p where role_id = ~p and other_rid = ~p">>).
-define(sql_select_rela_data_by_rela,
    <<"select role_id, rela_type from relationship where other_rid = ~p and rela_type in(~s)">>).

-define(sql_get_last_relas_by_role_id,
    <<"select role_id, other_id, time from last_rela_chat where role_id = ~p">>).
-define(sql_del_last_rela_by_role_id,
    <<"delete from last_rela_chat where role_id = ~p and other_id = ~p">>).
-define(sql_select_last_rela_data, 
    <<"select role_id from last_rela_chat where other_id = ~p">>).
-define(sql_replace_into_last_rela,
    <<"replace into last_rela_chat (role_id, other_id, time) values ~ts">>).

-define(sql_select_role_coupon_list,
    <<"select op_role, coupon_type, type, status, time from role_coupon_list where role_id = ~p">>).
-define(sql_replace_role_coupon_list,
    <<"replace into role_coupon_list set role_id = ~p, op_role = ~p, coupon_type = ~p, type = ~p, status = ~p, time = ~p">>).
-define(sql_batch_replace_role_coupon_list,
    <<"replace into role_coupon_list(role_id, op_role, coupon_type, type, status, time) values ~ts">>).
-define(sql_batch_replace_val,
    <<"(~p, ~p, ~p, ~p, ~p, ~p)">>).
-define(sql_update_role_coupon_list,
    <<"update role_coupon_list set status = ~p where role_id = ~p and op_role = ~p and coupon_type = ~p and type = ~p">>).
-define(sql_truncate_role_coupon_list,
    <<"truncate table role_coupon_list">>).