using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;

namespace AMESCoreStudio.WebApi.Models.BAS
{
    public class TimeAttribute : ValidationAttribute
    {
        //private int _price;
        //private string _isDisable;
        //private string _parentName;
        //private string _displayName;


        public TimeAttribute()//建構整定義了attribute可以丟進來的參數
        {
            //_price = price;
            //_isDisable = isDisable;
            //_parentName = parentName;
        }

        /// <summary>
        /// 使用propertyinfo的方式,來把字串解析出真實的值
        /// </summary>
        /// <param name="validationContext"></param>
        /// <param name="field"></param>
        /// <returns></returns>
        private object GetRealValue(ValidationContext validationContext, string field)
        {
            PropertyInfo isDisableInfo = validationContext.ObjectType.GetProperty(field);
            return isDisableInfo.GetValue(validationContext.ObjectInstance, null);
        }

        private string GetErrorMessage
        {
            get
            {
                return $"時間格是不正確";
            }
        }


        /// <summary>
        /// 主要邏輯驗證區
        /// </summary>
        /// <param name="value">屬性傳進來的值</param>
        /// <param name="validationContext">用此物件可以反解析字串的值,而取得真實的value</param>
        /// <returns></returns>
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            //bool isDisable = (bool)GetRealValue(validationContext, _isDisable);
            //_displayName = GetRealValue(validationContext, _parentName).ToString();

            //if (!isDisable)
            //{
            //    int inputValue = (int)value;
            //    if (inputValue < _price)
            //    {
            //        return new ValidationResult(GetErrorMessage);
            //    }
            //}
            //return ValidationResult.Success;
            string inputValue = (string)value;
            if (IsDate(inputValue))
                return ValidationResult.Success;
            else
                return new ValidationResult(GetErrorMessage);

        }
        bool IsDate(string strDate)
        {
            try
            {
                DateTime.Parse(strDate);
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// 覆寫官方的預設方法,只是要告知回傳的預設errormessage
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public override string FormatErrorMessage(string name)
        {
            if (string.IsNullOrEmpty(name))
            {
                return GetErrorMessage;
            }
            return name;
        }
    }
}