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 });
    }
}