using FluentValidation;

namespace SIGCM2.Application.PuntosDeVenta.Update;

public sealed class UpdatePuntoDeVentaCommandValidator : AbstractValidator<UpdatePuntoDeVentaCommand>
{
    private const int NombreMaxLength = 100;
    private const int DescripcionMaxLength = 255;
    private const short NumeroAFIPMin = 1;
    private const short NumeroAFIPMax = 9999;

    public UpdatePuntoDeVentaCommandValidator()
    {
        RuleFor(x => x.Id)
            .GreaterThan(0).WithMessage("El id debe ser mayor a 0.");

        RuleFor(x => x.NumeroAFIP)
            .InclusiveBetween(NumeroAFIPMin, NumeroAFIPMax)
            .WithMessage($"El número AFIP debe estar entre {NumeroAFIPMin} y {NumeroAFIPMax}.");

        RuleFor(x => x.Nombre)
            .NotEmpty().WithMessage("El nombre es requerido.")
            .MaximumLength(NombreMaxLength).WithMessage($"El nombre no puede superar los {NombreMaxLength} caracteres.");

        RuleFor(x => x.Descripcion)
            .MaximumLength(DescripcionMaxLength).WithMessage($"La descripción no puede superar los {DescripcionMaxLength} caracteres.")
            .When(x => x.Descripcion is not null);
    }
}
