using System;
using System.Collections.Generic;
using MessagePack;

#if GameClient
using GameFramework;
#endif

namespace GameMessage
{
    /// <summary>
    /// 推广员信息请求
    /// </summary>
    [Message(MessageCode.PromoterInfoRequest)]
    [MessagePackObject()]
    public class PromoterInfoRequest : MessageData
    {
#if GameClient
        public static PromoterInfoRequest Create()
        {
            return ReferencePool.Acquire<PromoterInfoRequest>();
        }
#endif
    }

    /// <summary>
    /// 推广员信息响应
    /// </summary>
    [Message(MessageCode.PromoterInfoResponse)]
    [MessagePackObject()]
    public class PromoterInfoResponse : MessageData
    {
        /// <summary>
        /// 推广等级
        /// </summary>
        [Key(0)]
        public int Level { get; set; }

        /// <summary>
        /// 充值金额汇总
        /// </summary>
        [Key(1)]
        public decimal TotalCost { get; set; }

        /// <summary>
        /// 注册用户汇总
        /// </summary>
        [Key(2)]
        public int TotalUser { get; set; }

        /// <summary>
        /// 总提成
        /// </summary>
        [Key(3)]
        public decimal TotalCommission { get; set; }
    }

    /// <summary>
    /// 推广员下线注册信息请求
    /// </summary>
    [Message(MessageCode.PromoterRegistrationRequest)]
    [MessagePackObject()]
    public class PromoterRegistrationRequest : MessageData
    {
        [Key(0)] public DataPage Page { get; set; }
        [Key(1)] public DateTime ReqTime { get; set; }

#if GameClient
        public static PromoterRegistrationRequest Create()
        {
            return ReferencePool.Acquire<PromoterRegistrationRequest>();
        }

        public override void Clear()
        {
            Page = null;
        }
#endif
    }

    /// <summary>
    /// 推广员下线注册信息回复
    /// </summary>
    [Message(MessageCode.PromoterRegistrationResponse)]
    [MessagePackObject()]
    public class PromoterRegistrationResponse : MessageData
    {
        /// <summary>
        /// 分页索引
        /// </summary>
        [Key(0)]
        public int PageIndex { get; set; }

        /// <summary>
        /// 总数
        /// </summary>
        [Key(1)]
        public int Count { get; set; }

        [Key(2)] public List<PromoterRegistrationInfo> List { get; set; }
    }

    [MessagePackObject()]
    public class PromoterRegistrationInfo
    {
        /// <summary>
        /// 注册时间
        /// </summary>
        [Key(0)]
        public DateTime Time { get; set; }

        /// <summary>
        /// 昵称
        /// </summary>
        [Key(1)]
        public string UserName { get; set; }
    }

    /// <summary>
    /// 推广员下线充值信息请求
    /// </summary>
    [Message(MessageCode.PromoterCostRequest)]
    [MessagePackObject()]
    public class PromoterCostRequest : MessageData
    {
        [Key(0)] public DataPage Page { get; set; }
        [Key(1)] public DateTime ReqTime { get; set; }

#if GameClient
        public static PromoterCostRequest Create()
        {
            return ReferencePool.Acquire<PromoterCostRequest>();
        }

        public override void Clear()
        {
            Page = null;
        }
#endif
    }

    /// <summary>
    /// 推广员下线充值信息回复
    /// </summary>
    [Message(MessageCode.PromoterCostResponse)]
    [MessagePackObject()]
    public class PromoterCostResponse : MessageData
    {
        /// <summary>
        /// 分页索引
        /// </summary>
        [Key(0)]
        public int PageIndex { get; set; }

        /// <summary>
        /// 总数
        /// </summary>
        [Key(1)]
        public int Count { get; set; }

        [Key(2)] public List<PromoterCostInfo> List { get; set; }
    }

    [MessagePackObject]
    public class PromoterCostInfo
    {
        /// <summary>
        /// 消费时间
        /// </summary>
        [Key(0)]
        public DateTime Time { get; set; }

        /// <summary>
        /// 昵称
        /// </summary>
        [Key(1)]
        public string UserName { get; set; }

        /// <summary>
        /// 消费金额
        /// </summary>
        [Key(2)]
        public string Amount { get; set; }
    }
}