using DynamicQuery.Net.Dto.Input;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace LifePayment.Application.Contracts
{
    public class CategoryDto
    {
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }

        /// <summary>
        /// 简述
        /// </summary>
        public string Sketch { get; set; }

        /// <summary>
        /// 图标地址
        /// </summary>
        public string Icon { get; set; }


        /// <summary>
        /// 头部图标地址
        /// </summary>
        public string HeadIcon { get; set; }

        /// <summary>
        /// 是否显示,true显示,false隐藏
        /// </summary>
        public bool IsVisable { get; set; }

        /// <summary>
        /// 是否支持广告
        /// </summary>
        public bool? IsSupportAdvertise { get; set; }

        /// <summary>
        /// 序号Id
        /// </summary>
        public int? CategoryIntId { get; set; }
    }

    public class CategoryAllDto
    {
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }

        /// <summary>
        /// 序号Id
        /// </summary>
        public int? CategoryIntId { get; set; }

    }

    public class GetCategoriesInput
    {
        /// <summary>
        /// 类型:0产品类别,1资讯类别
        /// </summary>
        [RegularExpression(@"[0,1,2,3,4]{1}", ErrorMessage = "类别类型不正确")]
        public int Type { get; set; }

        /// <summary>
        /// 排序信息:默认按Sequence升序
        /// </summary>
        public List<OrderInput> OrderInput { get; set; } = new List<OrderInput>
        {
            new OrderInput
            {
                Property = "Sequence",
                Order = DynamicQuery.Net.Enums.OrderTypeEnum.Asc,
            },
        };
    }

    public class GetCategoryQueryInput
    {
        /// <summary>
        /// 类型:0产品类别,1资讯类别
        /// </summary>
        public int? Type { get; set; }

        /// <summary>
        /// 是否显示,true显示,false隐藏
        /// </summary>
        public bool? IsVisable { get; set; }

        public string Name { get; set; }
    }

    public class CreateOrUpdateCategoryInput
    {
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid? Id { get; set; }

        /// <summary>
        /// 类型:0产品类别,1资讯类别
        /// </summary>
        [RegularExpression(@"[0,1,2,3]{1}", ErrorMessage = "类别类型不正确")]
        public int Type { get; set; }

        /// <summary>
        /// 名称
        /// </summary>
        [Required]
        [MaxLength(8)]
        public string Name { get; set; }

        /// <summary>
        /// 类别Id
        /// </summary>
        public int? CategoryIntId { get; set; }

        /// <summary>
        /// 简述
        /// </summary>
        [Required]
        [MaxLength(50)]
        public string Sketch { get; set; }

        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }

        /// <summary>
        /// 图标地址
        /// </summary>
        public string Icon { get; set; }


        /// <summary>
        /// 头部图标地址
        /// </summary>
        public string HeadIcon { get; set; }

        /// <summary>
        /// 是否支持广告
        /// </summary>
        public bool? IsSupportAdvertise { get; set; }

        /// <summary>
        /// 备选图片(封面信息)
        /// </summary>
        public List<CoverMsg> CoverInfo { get; set; }
    }

    public class SetCategoryVisInput
    {
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 类型:0产品类别,1资讯类别
        /// </summary>
        [RegularExpression(@"[0,1,2,3]{1}", ErrorMessage = "类别类型不正确")]
        public int Type { get; set; }
    }

    public class CategoryMenu
    {
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 头部图标地址
        /// </summary>
        public string HeadIcon { get; set; }

        /// <summary>
        /// 图标地址
        /// </summary>
        public string Icon { get; set; }

        /// <summary>
        /// 封面信息
        /// </summary>
        public IEnumerable<CoverMsg> Covers { get; set; }

        /// <summary>
        /// 简述
        /// </summary>
        public string Sketch { get; set; }

        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }
    }

    public class TagMenu
    {
        /// <summary>
        /// 标签Id
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid CategoryId { get; set; }
    }

    public class CoverMsg
    {
        /// <summary>
        /// 封面地址
        /// </summary>
        public string Url { get; set; }

        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }
    }

    public class TagDto
    {
        /// <summary>
        /// 标签Id
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid CategoryId { get; set; }


        /// <summary>
        ///  /// 行业服务 = 0 行业配套 = 1  甲方需求 = 2 行业资讯 = 3;
        /// </summary>
        public int? CategoryType { get; set; }

        /// <summary>
        /// 类别名称
        /// </summary>
        public string CategoryName { get; set; }

        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }

        /// <summary>
        /// 是否显示,默认为true 显示
        /// </summary>
        public bool IsVisable { get; set; }

        public Guid? CreatorId { get; set; }
    }

    public class GetTagsInput
    {
        /// <summary>
        /// 类型:0产品标签,1资讯标签,3快捷评论标签
        /// </summary>
        [RegularExpression(@"[0,1,2,3,4]{1}", ErrorMessage = "标签类型不正确")]
        public int Type { get; set; }

        /// <summary>
        /// 是否显示,true显示,false隐藏
        /// </summary>
        [System.Text.Json.Serialization.JsonIgnore]
        public bool? IsVisable { get; set; }

        /// <summary>
        /// 类别Id
        /// </summary>
        [System.Text.Json.Serialization.JsonIgnore]
        public Guid? CategoryId { get; set; }

        public int? CategoryType { get; set; }

        /// <summary>
        /// 排序信息:默认按Sequence升序
        /// </summary>
        public List<OrderInput> OrderInput { get; set; } = new List<OrderInput>
        {
            new OrderInput
            {
                Property = "Sequence",
                Order = DynamicQuery.Net.Enums.OrderTypeEnum.Asc,
            },
        };
    }

    public class SetTagVisInput
    {
        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 类型:0产品标签,1资讯标签,3快捷评论标签
        /// </summary>
        [RegularExpression(@"[0,1,2,3,4]{1}", ErrorMessage = "标签类型不正确")]
        public int Type { get; set; }
    }

    public class CreateOrUpdateTagInput
    {
        /// <summary>
        /// 标签Id
        /// </summary>
        public Guid? Id { get; set; }

        /// <summary>
        /// 类型:0产品标签,1资讯标签,2自定义标签,3快捷评论标签
        /// </summary>
        [RegularExpression(@"[0,1,2,3,4]{1}", ErrorMessage = "标签类型不正确")]
        public int Type { get; set; }

        /// <summary>
        /// 类别Id
        /// </summary>
        public Guid CategoryId { get; set; }

        /// <summary>
        /// 行业服务 = 0 行业配套 = 1  甲方需求 = 2 行业资讯 = 3;
        /// </summary>
        public int CategoryType { get; set; }

        /// <summary>
        /// 名称
        /// </summary>
        [Required]
        [MaxLength(8)]
        public string Name { get; set; }

        /// <summary>
        /// 排序
        /// </summary>
        public int Sequence { get; set; }
    }

    public class AreaDto
    {
        /// <summary>
        /// 编码
        /// </summary>
        public int AreaCode { get; set; }

        /// <summary>
        /// 父级编码
        /// </summary>
        public int? ParentCode { get; set; }

        /// <summary>
        /// 名称
        /// </summary>
        public string AreaName { get; set; }

        /// <summary>
        /// 1省 2市 3区 4镇
        /// </summary>
        public int? Layer { get; set; }

        /// <summary>
        /// 排序
        /// </summary>
        public int? Sort { get; set; }
    }

    public class GetAreaListInput
    {
        /// <summary>
        /// 1省 2市 3区 4镇
        /// </summary>
        public int? Layer { get; set; }

        /// <summary>
        /// 是否需要镇信息
        /// </summary>
        [System.Text.Json.Serialization.JsonIgnore]
        public bool NeedTown { get; set; }

        /// <summary>
        /// 父级编码
        /// </summary>
        public int? ParentCode { get; set; }
    }

    public class CategoryInfo : CategoryDto
    {
        /// <summary>
        /// 类型:0产品类别,1资讯类别
        /// </summary>
        public int Type { get; set; }

        /// <summary>
        /// 封面信息
        /// </summary>
        public IEnumerable<CoverMsg> Covers { get; set; }
    }

    public class AdvertisePriceInfo
    {
        /// <summary>
        /// 广告价位配置Id
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 广告类型:0产品服务,1行业资讯
        /// </summary>
        public int Type { get; set; }

        /// <summary>
        /// 广告位置:0首页一级,1首页二级,2详情页推荐
        /// </summary>
        public int Position { get; set; }

        /// <summary>
        /// 状态:-10已下架,10上架/显示中
        /// </summary>
        public int Status { get; set; }

        /// <summary>
        /// 价格信息
        /// </summary>
        public IEnumerable<PeriodPriceInfo> Prices { get; set; }
    }

    public class GetAdvertisePricesInput
    {
        /// <summary>
        /// 广告类型:0产品服务,1行业资讯
        /// </summary>
        public int? Type { get; set; }

        /// <summary>
        /// 广告位置:0首页一级,1首页二级,2详情页推荐
        /// </summary>
        public int? Position { get; set; }
    }

    public class PeriodPriceInfo
    {
        /// <summary>
        /// 投放周期类型:1天,7周,30月,90季,365年
        /// </summary>
        [RegularExpression(@"1|7|30|90|365", ErrorMessage = "投放周期类型不正确")]
        public int PeriodType { get; set; }

        /// <summary>
        /// ä»·æ ¼
        /// </summary>
        public decimal Price { get; set; }
    }

    public class CreateOrUpdateAdvertisePriceInput
    {
        /// <summary>
        /// 广告类型:0产品服务,1行业资讯
        /// </summary>
        [RegularExpression(@"0|1", ErrorMessage = "广告类型不正确")]
        public int Type { get; set; }

        /// <summary>
        /// 广告位置:0首页一级,1首页二级,2详情页推荐
        /// </summary>
        [RegularExpression(@"0|1|2", ErrorMessage = "广告位置不正确")]
        public int Position { get; set; }

        /// <summary>
        /// 价格信息
        /// </summary>
        public List<PeriodPriceInfo> Prices { get; set; }
    }

    public class GetAdvertisePriceInfosInput
    {
        /// <summary>
        /// 排序信息:默认按广告类型:Type、广告位置:Position升序
        /// </summary>
        public List<OrderInput> OrderInput { get; set; } = new List<OrderInput>
        {
            new OrderInput
            {
                Property = "Type",
                Order = DynamicQuery.Net.Enums.OrderTypeEnum.Asc,
            },
            new OrderInput
            {
                Property = "Position",
                Order = DynamicQuery.Net.Enums.OrderTypeEnum.Asc,
            },
        };
    }

    public class CreateOrUpdateRewardPercentageInput
    {
        /// <summary>
        /// Up主等级
        /// </summary>
        public int UpLevel { get; set; }

        /// <summary>
        /// Up主占比
        /// </summary>
        public decimal UpRatio { get; set; }

        /// <summary>
        /// 平台占比
        /// </summary>
        public decimal PlatformRatio { get; set; }
    }

    public class RewardPercentageInfo
    {
        /// <summary>
        /// Up主等级
        /// </summary>
        public int UpLevel { get; set; }

        /// <summary>
        /// Up主占比
        /// </summary>
        public decimal UpRatio { get; set; }

        /// <summary>
        /// 平台占比
        /// </summary>
        public decimal PlatformRatio { get; set; }
    }

    public class GetRewardPercentagesInput
    {
        /// <summary>
        /// 排序信息:默认按Up主等级:UpLevel升序
        /// </summary>
        public List<OrderInput> OrderInput { get; set; } = new List<OrderInput>
        {
            new OrderInput
            {
                Property = "UpLevel",
                Order = DynamicQuery.Net.Enums.OrderTypeEnum.Asc,
            },
        };
    }

    public class InitSettingInfo
    {
        /// <summary>
        /// 平台自营服务商名称
        /// </summary>
        public string SelfSupportingServiceName { get; set; }

        /// <summary>
        /// 平台服务电话
        /// </summary>
        public string PlatServicePhone { get; set; }
    }

    public class AreaInfo
    {
        public int AreaCode { get; set; }

        public int? ParentId { get; set; }

        public string AreaName { get; set; }

        /// <summary>
        /// 1省 2市 3区 4镇
        /// </summary>
        public int? Layer { get; set; }

        public int? Sort { get; set; }

        public List<AreaInfo> Children { get; set; }

        /// <summary>
        /// 简易拼音
        /// </summary>
        public string SimpleSpelling { get; set; }

        /// <summary>
        /// 快速检索
        /// </summary>
        public string QuickQuery { get; set; }
    }

    public class PlatformContactList
    {
        public Guid Id { get; set; }

        /// <summary>
        /// 行业服务 = 0 行业配套 = 1  甲方需求 = 2 行业资讯 = 3;
        /// </summary>
        [Required]
        public int CategoryType { get; set; }

        public Guid CategoryId { get; set; }

        public string CategoryName { get; set; }

        /// <summary>
        /// 联系方式
        /// </summary>
        [Required]
        public string ContactPhone { get; set; }
    }

    public class CreateOrEditPlatformContactInput
    {
        public Guid? Id { get; set; }

        /// <summary>
        ///  行业服务 = 0 行业配套 = 1  甲方需求 = 2 行业资讯 = 3;
        /// </summary>
        [Required]
        public int CategoryType { get; set; }

        public Guid CategoryId { get; set; }

        /// <summary>
        /// 联系方式
        /// </summary>
        [Required]
        public string ContactPhone { get; set; }
    }

    /// <summary>
    /// 用户认证相关配置参数
    /// </summary>
    public class UserCertificationSettingInfo
    {
        /// <summary>
        /// 收款账号
        /// </summary>
        public string ReceivingAccount { get; set; }

        /// <summary>
        /// 收款公司名
        /// </summary>
        public string ReceivingCompanyName { get; set; }

        /// <summary>
        /// 收款开户银行
        /// </summary>
        public string ReceivingBankName { get; set; }

        /// <summary>
        /// 用户认证费用
        /// </summary>
        public decimal UserCertificationAmount { get; set; }

        /// <summary>
        /// 用户认证收款备注
        /// </summary>
        public string UserCertificationReceivingRemark { get; set; }

        public string EnterprisePowerAttorneyTempPath { get; set; }

        public string AuthenticationHelpUrl { get; set; }

        public string IDPhoteTempPath { get; set; }

        /// <summary>
        /// 线下支付汇款天数(单位:天)
        /// </summary>
        public int OfflinePayEndDays { get; set; } = 3;

        /// <summary>
        /// 线下支付汇款最晚时间
        /// </summary>
        public DateTime OfflinePayEndTime { get; set; }
    }
}