using System;
using System.ComponentModel.DataAnnotations;

namespace GestionIntegral.Api.Dtos.Distribucion
{
    [CustomValidation(typeof(EntradaSalidaCanillaItemDto), nameof(ValidateCantidadesItem))] // Aplicar a nivel de clase
    public class EntradaSalidaCanillaItemDto
    {
        [Required(ErrorMessage = "El ID de la publicación es obligatorio.")]
        [Range(1, int.MaxValue, ErrorMessage = "El ID de la publicación debe ser válido.")] // Asegurar que no sea 0
        public int IdPublicacion { get; set; }

        [Required(ErrorMessage = "La cantidad de salida es obligatoria.")]
        [Range(0, int.MaxValue, ErrorMessage = "La cantidad de salida debe ser un número positivo o cero.")]
        public int CantSalida { get; set; }

        [Required(ErrorMessage = "La cantidad de entrada es obligatoria.")]
        [Range(0, int.MaxValue, ErrorMessage = "La cantidad de entrada debe ser un número positivo o cero.")]
        public int CantEntrada { get; set; }
        
        [StringLength(150)]
        public string? Observacion { get; set; }

        // Ya no necesitamos la propiedad CantidadesError para esta validación
        // public string? CantidadesError { get; set; } 

        public static ValidationResult? ValidateCantidadesItem(EntradaSalidaCanillaItemDto instanceToValidate, ValidationContext context)
        {
            if (instanceToValidate == null)
            {
                // Aunque el model binder debería crear la instancia, verificamos
                return ValidationResult.Success; // O un error si una instancia nula es inválida por sí misma
            }

            if (instanceToValidate.CantEntrada > instanceToValidate.CantSalida)
            {
                // Asociar el error a ambas propiedades podría ser útil en la UI
                return new ValidationResult(
                    "La cantidad de entrada (devolución) no puede ser mayor a la cantidad de salida (retiro).", 
                    new[] { nameof(CantEntrada), nameof(CantSalida) }
                );
            }
            return ValidationResult.Success;
        }
    }
}