%% ---------------------------------------------------------------------------
%% @doc 交易市场头文件 
%% @author zhaoyu
%% @since  2019-12-17
%% ---------------------------------------------------------------------------

-ifndef(MARKET_HRL).
-define(MARKET_HRL, ok).

%% 交易市场-交易市场物品信息ets。保存数据格式:[#market_goods{}]
-define(MARKET_GOODS_ETS, market_goods_ets).                  %% 正在出售的商品

%% 交易市场-交易市场玩家出价信息ets。保存数据格式:[#market_bid{}]
-define(MARKET_BID_ETS, market_bid_ets).

%% 交易市场-入库提醒订阅信息ets。保存数据格式:[#market_reminder{}]
-define(MARKET_REMINDER_ETS, market_reminder_ets).

%% 交易市场-系统补给商品数据信息ets。保存数据格式:[#market_supply{}]
-define(MARKET_SUPPLY_ETS, market_supply_ets).

%% 市场成交记录类型-世界记录
-define(MARKET_DEAL_LOG_WORLD, 1).
%% 市场成交记录类型-公会记录
-define(MARKET_DEAL_LOG_GUILD, 2).
%% 市场成交记录类型-角色记录
-define(MARKET_DEAL_LOG_ROLE, 3).

%% 拍卖类型-世界拍卖
-define(MARKET_SELL_TYPE_WORLD, 1).
%% 拍卖类型-公会拍卖
-define(MARKET_SELL_TYPE_GUILD, 2).

%% 可上架区域-社团和世界都可以上架
-define(MARKET_RANGE_ALL, 0).
%% 可上架区域-只能上架世界
-define(MARKET_RANGE_WORLD, 1).
%% 可上架区域-只能上架社团
-define(MARKET_RANGE_GUILD, 2).


%% 系统-角色Id, 系统回购后再出售的出售者
-define(MARKET_SYS_ROLE_ID, 1).
%% 系统-最大角色id : 模块功能id，
-define(MARKET_SYS_MAX_ROLE_ID, 655).

%% 日计数器
-define(MARKET_COUNTER_DAILY_REMINDER,  1).

%% 市场操作
-define(MARKET_OPERATION_MANUAL_ON,   1).  %% 手动上架
-define(MARKET_OPERATION_MANUAL_OFF,  2).  %% 手动下架
-define(MARKET_OPERATION_SETTLEMENT,  3).  %% 成交
-define(MARKET_OPERATION_SYS_DEL,     4).  %% 系统删除
-define(MARKET_OPERATION_SYS_ON,      5).  %% 系统上架
-define(MARKET_OPERATION_SYS_OFF,     6).  %% 系统下架
-define(MARKET_OPERATION_OFF_TO_WORLD, 7).  %% 下架流拍至世界

%% 购买方式
-define(MARKET_BUY_TYPE_NORMAL,      1).    %% 购买方式-正常竞拍
-define(MARKET_BUY_TYPE_EQUIP_AUTO,  2).    %% 购买方式-装备进化升星自动

%% 买卖身份
-define(MARKET_SELLER,  1).
-define(MARKET_BUYER,   2).
%% 推荐子类配置
-record(market_recommend_cfg, {
        id = 0                      %% 推荐Id
        ,name = <<>>                %% 名称
        ,sell_type = 0              %% 商品大类Id
        ,sell_sub_type = 0          %% 商品子类Id
        ,quality_range = {0, 0}     %% 物品品质区间
    }
).

%% 系统回购配置
-record(market_buyback_cfg, {
        goods_id = 0                %% 可回购物品Id
        ,open_day_min = 0               %% 开服天数
        ,open_day_max = 0               %% 开服天数
        ,sell_again = 0             %% 是否系统上架（1是，0否）
        ,buyback_time = {0, 0}      %% 开售多少秒后，系统可以在此时间范围内随机回购
    }
).


%% 系统补货配置
-record(market_sys_sell_cfg, {
    goods_id = 0                %% 物品Id
    ,open_day_min = 0               %% 开服天数
    ,open_day_max = 0               %% 开服天数
    ,trigger_sys_sell_num = 0   %% 累积上架多少数量后会触发系统补充机制
    ,trigger_num = 0            %% 市场上在售少于多少后触发系统进行补货
    ,sell_num = 0               %% 每次补货数量
    ,sell_max_num = 0           %% 每日补货数量上限
}
).


%% 交易市场管理进程state
-record(market_mgr, {
        off_time_list = []          %% 每个竞拍子类最早结束的定时信息 [#m_off_time_info{}}]
        ,buyback_time_list = []     %% 每个物品最早被系统回购的定时信息 [#m_buyback_time_info{}}]
        ,all_deal_log_list = []     %% 成交记录列表-[#deal_log_type{}]
    }
).

%% 每个竞拍子类最早结束的定时信息
-record(m_off_time_info, {
        key = {0, 0}                %% 每个子类key {Type, SubType}
        ,min_off_time = 0           %% 竞拍结束时间戳
        ,timer_ref = 0              %% 竞拍结束定时器 TimerRef
    }
).

%% 每个物品最早被系统回购的定时信息
-record(m_buyback_time_info, {
        goods_type_id = 0           %% 回购物品类型Id
        ,min_time = 0               %% 系统回购时间戳
        ,timer_ref = 0              %% 系统回购定时器 TimerRef
    }
).

%% 交易市场物品信息
-record(market_goods, {
        id = 0                      %% 交易市场商品拍卖Id
        ,role_id = 0                %% 出售玩家角色Id, 非玩家出售的商品id为1或者功能id
        ,goods_id = 0               %% 物品唯一Id
        ,goods_type_id = 0          %% 物品类型Id
        ,num = 0                    %% 物品数量
        ,lev = 0                    %% 物品等级
        ,color = 0                  %% 物品品质
        ,price = 0                  %% 目前竞拍价格
        ,sell_type = 0              %% 上架类型：1:世界上架2:社团上架
        ,guild_id = 0               %% 公会Id
        ,time = 0                   %% 物品上架时间
        ,off_time = 0               %% 物品拍卖截止时间
        ,sys_buyback_time = 0       %% 系统回购时间戳-0表示系统不回购
        ,sys_buyback_count = 0      %% 系统回购次数
        ,is_to_world = 0            %% 公会上架流拍是否上架世界：0:否1:是
        ,bidder_id = 0              %% 最高出价玩家Id
        ,extra_attr = []            %% 物品额外特殊属性
        ,bid_count = 0              %% 出价次数
        ,off_shelf = 0              %% 是否下架：超时没人买就会下架

        %% 下面的字段不保存数据库
        ,type = 0                   %% 商品大类
        ,sub_type = 0               %% 商品子类
        ,buyout_price = 0           %% 交易一口价（为0时无一口价）
        ,career = []                %% 职业限制:[]为不限
        ,sex = 0                    %% 性别限制，0为不限，1为男，2为女
        ,series = 0                 %% 装备套数
    }
).

%% 交易市场玩家出价信息
-record(market_bid, {
        key = {0, 0}                %% key: {RoleId, Id}
        ,id = 0                     %% 交易市场商品拍卖Id
        ,role_id = 0                %% 出价玩家角色Id
        ,role_name = 0              %% 出价玩家角色名字
        ,price = 0                  %% 竞价
        ,time = 0                   %% 最后一次出价时间戳
    }
).


%% 交易市场玩家关注
-record(market_like, {
        id = 0                      %% 交易市场商品拍卖Id
        ,role_id = 0                %% 玩家角色Id
        ,time = 0                   %% 关注时间戳
    }
).

%% 入库提醒订阅信息
-record(market_reminder, {
        key = {0, 0}                %% Key: {RoleId, GoodsTypeId}
        ,role_id = 0                %% 玩家角色Id
        ,goods_type_id = 0          %% 物品类型Id
    }
).


%% 系统补给商品数据信息
-record(market_supply, {
        goods_type_id = 0           %% 物品类型Id
        ,num = 0                    %% 全服玩家累积上架物品数量
        ,supply_num = 0             %% 系统今日累积补给数量
        ,time = 0                   %% 系统最近一次补给时间戳
    }
).


%% 筛选参数
-record(market_select, {
        sell_type = 0               %% 拍卖类型 1:世界拍卖 2:公会拍卖
        ,type = 0                   %% 商品大类
        ,sub_type = 0               %% 商品子类
        ,lev = {0, 0}               %% 等级范围
        ,color = {0, 0}             %% 品质范围
        ,series = 0                 %% 装备套数
        ,career = 0                 %% 职业限制:0为不限
        ,sex = 0                    %% 性别限制，0为不限，1为男，2为女
        ,guild_id = 0               %% 公会Id
    }
).

%% 交易市场成交记录
-record(market_deal_log, {
        id = 0                      %% 交易市场商品拍卖Id
        ,role_id = 0                %% 出售玩家角色Id
        ,get_role_id = 0            %% 获得者玩家Id
        ,get_role_name = 0          %% 获得者名字
        ,goods_id = 0               %% 物品唯一Id
        ,goods_type_id = 0          %% 物品类型Id
        ,num = 0                    %% 物品数量
        ,lev = 0                    %% 物品等级
        ,color = 0                  %% 物品品质
        ,price = 0                  %% 成交价格
        ,sell_type = 0              %% 上架类型：1:世界上架2:社团上架
        ,guild_id = 0               %% 公会Id
        ,time = 0                   %% 物品上架时间
        ,deal_time = 0              %% 成交时间戳
        ,deal_type = 0              %% 成交类型:0:竞价1:一口价
        ,log_type = 0               %% 成交记录大类
        ,extra_attr = []            %% 物品额外特殊属性

        %% 下面的字段不保存数据库
        ,type = 0                   %% 商品大类
        ,sub_type = 0               %% 商品子类
    }
).

%% 交易市场交易记录
-record(deal_log_type, {
        log_key = {0, 0}            %% 成交记录大类-{SellType, LogType}
        ,log_list = []              %% 成交记录列表-[#market_deal_log{}]
    }
).


%% 交易市场成交记录
-record(market_role_deal_log, {
        id = 0                      %% 交易市场商品拍卖Id
        ,role_id = 0                %% 角色Id
        ,rela_role_id = 0           %% 关联玩家Id
        ,goods_type_id = 0          %% 物品类型Id
        ,num = 0                    %% 物品数量
        ,price = 0                  %% 成交价格
        ,sell_type = 0              %% 上架类型：1:世界上架2:社团上架
        ,guild_id = 0               %% 公会Id
        ,time = 0                   %% 物品上架时间
        ,deal_time = 0              %% 成交时间戳
        ,deal_type = 0              %% 成交类型:0:竞价1:一口价2:卖出
        ,extra_attr = []            %% 物品额外特殊属性
    }
).

%% 角色交易市场数据
-record(market_data, {
        deal_log_list = []          %% 成交记录列表-[#market_role_deal_log{}]
        ,like_list = []             %% 角色关注的物品列表-[#market_like{}]
        ,like_num = 0               %% 角色关注的物品数量
        ,reminder_list = []         %% 角色入库提醒订阅信息列表-[GoodsTypeId]
    }
).



%% 交易市场出售的商品信息(竞拍时间结束自动下架的物品也保存在这个表)
-define(SAVE_MARKET_GOODS, <<"REPLACE INTO `market_goods` (`id`, `role_id`, `goods_id`, `goods_type_id`, `num`, `lev`"
    ", `color`, `price`, `sell_type`, `guild_id`, `time`, `off_time`, `sys_buyback_time`, `is_to_world`, `bidder_id`, `extra_attr`, `sys_buyback_count`, `off_shelf`)"
    " values (~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, '~ts', ~p, ~p)">>).

-define(BATCH_SAVE_MARKET_GOODS, <<"REPLACE INTO `market_goods` (`id`, `role_id`, `goods_id`, `goods_type_id`, `num`, `lev`"
    ", `color`, `price`, `sell_type`, `guild_id`, `time`, `off_time`, `sys_buyback_time`, `is_to_world`, `bidder_id`, `extra_attr`, `sys_buyback_count`, `off_shelf`)"
    " values ~ts">>).

-define(LOAD_MARKET_GOODS, <<"SELECT `id`, `role_id`, `goods_id`, `goods_type_id`, `num`, `lev`, `color`, `price`"
    ", `sell_type`, `guild_id`, `time`, `off_time`, `sys_buyback_time`, `is_to_world`, `bidder_id`, `extra_attr`, `sys_buyback_count`, `off_shelf` FROM `market_goods`">>).

-define(DEL_MARKET_GOODS, <<"DELETE FROM `market_goods` WHERE `id` = ~p AND `role_id` = ~p">>).



%% 交易市场玩家竞拍出价
-define(SAVE_MARKET_BID, <<"REPLACE INTO `market_bid_info` (`id`, `role_id`, `role_name`, `price`, `time`) values (~p, ~p, '~ts', ~p, ~p)">>).
-define(LOAD_MARKET_BID, <<"SELECT `id`, `role_id`, `role_name`, `price`, `time` FROM `market_bid_info`">>).
-define(DEL_ROLE_MARKET_BID, <<"DELETE FROM `market_bid_info` WHERE `id` = ~p AND `role_id` = ~p">>).
-define(DEL_MARKET_BID, <<"DELETE FROM `market_bid_info` WHERE `id` = ~p">>).


%% 玩家竞拍关注
-define(SAVE_MARKET_LIKE, <<"REPLACE INTO `market_like_info` (`id`, `role_id`, `time`) values (~p, ~p, ~p)">>).
-define(LOAD_MARKET_LIKE, <<"SELECT `id`, `role_id`, `time` FROM `market_like_info` WHERE `role_id` = ~p">>).
-define(DEL_MARKET_LIKE, <<"DELETE FROM `market_like_info` WHERE `id` = ~p AND `role_id` = ~p">>).
-define(DEL_MARKET_LIKE_BY_ID, <<"DELETE FROM `market_like_info` WHERE `id` = ~p">>).

%% 交易市场成交记录
-define(SAVE_MARKET_DEAL_LOG, <<"REPLACE INTO `market_deal_log` (`id`, `role_id`, `get_role_id`, `get_role_name`, `goods_id`"
    ", `goods_type_id`, `num`, `lev`, `color`, `price`, `sell_type`, `guild_id`, `time`, `deal_time`, `deal_type`, `log_type`"
    ", `extra_attr`) values ~ts">>).

-define(LOAD_MARKET_DEAL_LOG, <<"SELECT `id`, `role_id`, `get_role_id`, `get_role_name`, `goods_id`, `goods_type_id`, `num`, `lev`"
    ", `color`, `price`, `sell_type`, `guild_id`, `time`, `deal_time`, `deal_type`, `log_type`, `extra_attr` FROM `market_deal_log`">>).

-define(DEL_MARKET_DEAL_LOG, <<"DELETE FROM `market_deal_log` WHERE `id` = ~p">>).
-define(DEL_ALL_MARKET_DEAL_LOG, <<"TRUNCATE TABLE  `market_deal_log`">>).


%% 角色交易市场成交记录
-define(SAVE_M_ROLE_DEAL_LOG, <<"REPLACE INTO `market_role_deal_log` (`id`, `role_id`, `rela_role_id`, `goods_type_id`"
    ", `num`, `price`, `sell_type`, `guild_id`, `time`, `deal_time`, `deal_type`, `extra_attr`)"
    " VALUES ~ts">>).

-define(LOAD_M_ROLE_DEAL_LOG, <<"SELECT `id`, `role_id`, `rela_role_id`, `goods_type_id`, `num`, `price`, `sell_type`, `guild_id`"
    ", `time`, `deal_time`, `deal_type`, `extra_attr` FROM `market_role_deal_log` WHERE `role_id` = ~p">>).

-define(DEL_M_ROLE_DEAL_LOG, <<"DELETE FROM `market_role_deal_log` WHERE `id` = ~p AND `role_id` = ~p">>).
-define(DEL_M_ROLE_DEAL_LOG_BY_TIME, <<"DELETE FROM `market_role_deal_log` WHERE `role_id` = ~p AND `deal_time` <= ~p">>).


%% 交易市场入库提醒订阅信息
-define(SAVE_MARKET_REMINDER, <<"REPLACE INTO `market_reminder_info` (`role_id`, `reminder_list`) values (~p, '~ts')">>).

-define(LOAD_MARKET_REMINDER, <<"SELECT `reminder_list` FROM `market_reminder_info` WHERE `role_id` = ~p">>).

-define(DEL_MARKET_REMINDER, <<"DELETE FROM `market_reminder_info` WHERE `role_id` = ~p">>).


%% 交易市场系统补给商品数据
-define(SAVE_MARKET_SUPPLY, <<"REPLACE INTO `market_goods_supply_info` (`goods_type_id`, `num`, `supply_num`, `time`) values (~p, ~p, ~p, ~p)">>).
-define(BATCH_SAVE_MARKET_SUPPLY, <<"REPLACE INTO `market_goods_supply_info` (`goods_type_id`, `num`, `supply_num`, `time`) values ~ts">>).

-define(LOAD_MARKET_SUPPLY, <<"SELECT `goods_type_id`, `num`, `supply_num`, `time` FROM `market_goods_supply_info`">>).



-endif.                             %% MARKET_HRL


