namespace Utilitarios.APINet.Atributos
{
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.Filters;
    using System;
    using System.Linq;
    using Utilitarios.TransversalesNet.Clases.Comunes.Enumeraciones;
    using UtilitariosNet.Clases.Comunes.Entidades;

    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
    public class ValidarModeloAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext contextoPeticion)
        {
            if (!contextoPeticion.ModelState.IsValid)
            {
                Respuesta<bool> respuesta = new Respuesta<bool>
                {
                    Resultado = false,
                    TipoNotificacion = TipoNotificacion.Advertencia
                };
                contextoPeticion.ModelState.Values.SelectMany(v => v.Errors).ToList().ForEach(x =>
                {
                    if (!string.IsNullOrEmpty(x.ErrorMessage))
                    {
                        respuesta.Mensajes.Add(x.ErrorMessage);
                    }
                });
                contextoPeticion.Result = new BadRequestObjectResult(respuesta);
            }
        }
    }
}