using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CP.Common
{
    public static class ValidationTools
    {
        /// <summary>
        /// 验证int数据并且比较最大最小超出范围取最小
        /// </summary>
        /// <param name="value">value</param>
        /// <param name="min">最小值</param>
        /// <param name="max">最大值</param>
        /// <returns></returns>
        public static int CheckInt(Object value, int min, int max)
        {
            try
            {
                int tmp = 0;
                int.TryParse(value.ToString(), out tmp);
                if (tmp > max || tmp < min)
                {
                    tmp = min;
                }
                return tmp;
            }
            catch (Exception ee)
            {

                return 0;
            }
        }
        /// <summary>
        /// 验证字符串是否有非法字符 如果是将返回默认
        /// </summary>
        /// <param name="value">value</param>
        /// <param name="defaultStr">默认字符串</param>
        /// <param name="maxlength">最大长度</param>
        /// <returns></returns>
        public static string CheckStr(this string value, string defaultStr, int maxlength)
        {
            try
            {
                string[] aryReg = { "'", "'delete", "?", "<", ">", "%", "\"\"", ",", ".", ">=", "=<", ";", "||", "[", "]", "&", "/", "|", " ", "''" };
                string tmp = defaultStr;
                if (value.Length < maxlength)
                {
                    var regchar = value.Where(w => aryReg.ToList().Contains(w.ToString())).ToList();
                    if (regchar.Count != 0)
                    {
                        tmp = defaultStr;
                    }
                    else
                    {
                        tmp = value;
                    }
                }
                return tmp;
            }
            catch (Exception ee)
            {
                return null;
            }
        }

        /// <summary>
        /// 判断字符串是否包含其中
        /// </summary>
        /// <param name="value">value</param>
        /// <param name="charStr">params参数</param>
        /// <returns></returns>
        public static bool CheckHasChar(string value, params string[] charStr)
        {
            try
            {
                int istrue = 0;
                for (int i = 0; i < charStr.Length; i++)
                {
                    if (value.Contains(charStr[i]))
                    {
                        istrue += 1;
                    }
                }
                if (istrue == charStr.Length)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ee)
            {

                return false;
            }

        }



        /// <summary>
        ///验证字符串是否是符合标准的时间格式数据
        /// </summary>
        /// <param name="value">value</param>
        /// <param name="defaultTime">默认返回时间</param>
        /// <param name="mintime">最小时间</param>
        /// <param name="maxTime">最大时间</param>
        /// <returns></returns>
        public static DateTime CheckTime(string value, DateTime defaultTime, DateTime mintime, DateTime maxTime)
        {
            try
            {
                DateTime tmp = DateTime.Now;
                DateTime.TryParse(value, out tmp);
                if (tmp > maxTime || tmp < mintime)
                {
                    tmp = defaultTime;
                }
                return tmp;

            }
            catch (Exception ee)
            {

                return defaultTime;
            }
        }


    }
}