using System;

namespace AsbCloudApp.Exceptions
{
    /// <summary>
    /// Argument validation fail Exception 
    /// </summary>
    public class ArgumentInvalidException : Exception
    {
        /// <summary>
        /// название аргумента
        /// </summary>
        public string ParamName { get; }

        /// <summary>
        /// конструктор
        /// </summary>
        /// <param name="message"></param>
        /// <param name="paramName"></param>
        public ArgumentInvalidException(string message, string paramName = default)
            : base(message)
        {
            ParamName = paramName;
        }

        /// <summary>
        /// преобразование в объект валидации
        /// </summary>
        /// <returns></returns>
        public object ToValaidationErrorObject()
        => MakeValidationError(ParamName, Message);

        /// <summary>
        /// фабрика объекта валидации
        /// </summary>
        /// <param name="paramName"></param>
        /// <param name="errors"></param>
        /// <returns></returns>
        public static object MakeValidationError(string paramName, params string[] errors)
        => new
        {
            name = paramName,
            errors,
        };
    }
}