using FluentValidation;

namespace SIGCM2.Application.IngresosBrutos.Create;

public sealed class CreateIngresosBrutosCommandValidator : AbstractValidator<CreateIngresosBrutosCommand>
{
    private const int DescripcionMaxLength = 255;

    public CreateIngresosBrutosCommandValidator()
    {
        RuleFor(x => x.Descripcion)
            .NotEmpty().WithMessage("La descripción es requerida.")
            .MaximumLength(DescripcionMaxLength)
            .WithMessage($"La descripción no puede superar los {DescripcionMaxLength} caracteres.");

        RuleFor(x => x.Alicuota)
            .InclusiveBetween(0m, 100m)
            .WithMessage("La alícuota debe estar entre 0 y 100.");

        RuleFor(x => x.VigenciaDesde)
            .NotEqual(default(DateOnly))
            .WithMessage("La fecha de vigencia desde es requerida.");

        RuleFor(x => x.VigenciaHasta)
            .GreaterThanOrEqualTo(x => x.VigenciaDesde)
            .WithMessage("VigenciaHasta no puede ser anterior a VigenciaDesde.")
            .When(x => x.VigenciaHasta.HasValue);
    }
}
