using System;
using System.Collections.Generic;
using System.Linq;

namespace AsbCloudApp.Exceptions
{
    /// <summary>
    /// Argument validation fail Exception 
    /// </summary>
    public class ArgumentInvalidException : Exception
    {
        /// <summary>
        /// словарь с ошибками, где ключ - имя аргумента, а значение - массив из одного сообщения
        /// </summary>
        public IDictionary<string, string[]> ErrorState { get; } = null!;

        // TODO: swap arguments, inherit from ArgumentException
        /// <summary>
        /// конструктор
        /// </summary>
        /// <param name="paramName"></param>
        /// <param name="message"></param>
        public ArgumentInvalidException(string paramName, string message)
            : base(message)
        {
            ErrorState = new Dictionary<string, string[]>() {
                { paramName, new[]{ message } }
            };
        }

        /// <summary>
        /// конструктор
        /// </summary>
        /// <param name="paramsNames"></param>
        /// <param name="message"></param>
        public ArgumentInvalidException(string[] paramsNames, string message)
            : base(message)
        {
            ErrorState = paramsNames.ToDictionary(paramName => paramName, item => new[] { message });
        }
    }
}