using FluentValidation;

namespace SIGCM2.Application.Products.Update;

public sealed class UpdateProductCommandValidator : AbstractValidator<UpdateProductCommand>
{
    public UpdateProductCommandValidator()
    {
        RuleFor(x => x.Id)
            .GreaterThan(0).WithMessage("Id debe ser un entero positivo.");

        RuleFor(x => x.Nombre)
            .NotEmpty().WithMessage("El nombre del producto es requerido.")
            .MaximumLength(300).WithMessage("El nombre no puede superar los 300 caracteres.");

        RuleFor(x => x.BasePrice)
            .GreaterThanOrEqualTo(0m).WithMessage("El precio base no puede ser negativo.");

        RuleFor(x => x.PriceDurationDays)
            .GreaterThan(0).When(x => x.PriceDurationDays.HasValue)
            .WithMessage("PriceDurationDays debe ser >= 1 cuando se provee.");
    }
}
