using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Core.Attributes
{
    [AttributeUsage(AttributeTargets.Property)]
    public class PropertyValidateAttribute : Attribute
    {
        /// 
        /// 最大值
        /// 
        public int MaxValue { get; set; } = int.MaxValue;
        /// 
        /// 最小值
        /// 
        public int MinValue { get; set; } = int.MinValue;
        /// 
        /// 非空
        /// 
        public bool NotNullAndEmpty { get; set; } = true;
        /// 
        /// 是否包含最大值
        /// 
        public bool IsContainMaxValue { get; set; } = false;
        /// 
        /// 是否包含最小值
        /// 
        public bool IsContainMinValue { get; set; } = false;
        /// 
        /// 根据其他属性非空判断当前是否为非空
        /// 
        public string NotNullAndEmptyWithProperty { get; set; }
        /// 
        /// 根据其他属性值判断当前是否为非空(格式【new string[]{ "属性名称", "属性值" }】)
        /// 
        public string[] NotNullAndEmptyWithPropertyAndValue { get; set; }
        /// 
        /// 说明
        /// 
        public string Description { get; set; }
        /// 
        /// 检查约束,属性值只允许是数组中的值
        /// 
        public object[] Check { get; set; }
        /// 
        /// 以...开头
        /// 
        public string StartWith { get; set; }
        /// 
        /// 以...结尾
        /// 
        public string EndWith { get; set; }
        /// 
        /// 最小长度
        /// 
        public int MinLength { get; set; } = 0;
        /// 
        /// 最大长度
        /// 
        public int MaxLength { get; set; } = int.MaxValue;
        public PropertyValidateAttribute(string description)
        {
            if (!string.IsNullOrEmpty(description))
                Description = description;
        }
    }
    [AttributeUsage(AttributeTargets.Class)]
    public class ModelValidateAttribute : Attribute
    {
        public ModelValidateType ModelValidateType { get; } = ModelValidateType.SimpleValidate;
        public Func