using System.ComponentModel.DataAnnotations;

namespace GestionIntegral.Api.Dtos.Distribucion
{
    // Aplicar el CustomValidation a nivel de clase
    [CustomValidation(typeof(UpdateEntradaSalidaCanillaDto), nameof(ValidateCantidades))]
    public class UpdateEntradaSalidaCanillaDto
    {
        [Required, Range(0, int.MaxValue)]
        public int CantSalida { get; set; }

        [Required, Range(0, int.MaxValue)]
        public int CantEntrada { get; set; }

        [StringLength(150)]
        public string? Observacion { get; set; }

        // El método de validación ahora recibe la instancia completa del DTO
        public static ValidationResult? ValidateCantidades(UpdateEntradaSalidaCanillaDto instanceToValidate, ValidationContext context)
        {
            if (instanceToValidate == null)
            {
                // No debería ocurrir si el model binding funcionó, pero es una buena práctica.
                return ValidationResult.Success;
            }

            if (instanceToValidate.CantEntrada > instanceToValidate.CantSalida)
            {
                // Asociar el error a las propiedades relevantes si es posible y útil
                return new ValidationResult(
                    "La cantidad de entrada no puede ser mayor a la de salida.",
                    new[] { nameof(CantEntrada), nameof(CantSalida) } // Opcional: nombres de miembros
                );
            }
            return ValidationResult.Success;
        }
    }
}