using FluentValidation;

namespace SIGCM2.Application.TiposDeIva.Update;

public sealed class UpdateTipoDeIvaCommandValidator : AbstractValidator<UpdateTipoDeIvaCommand>
{
    private const int DescripcionMaxLength = 255;

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

        RuleFor(x => x.Codigo)
            .NotEmpty().WithMessage("El código es requerido.")
            .Matches(@"^(EXENTO|NO_GRAVADO|IVA_\d+)$")
            .WithMessage("El código debe cumplir el formato EXENTO, NO_GRAVADO o IVA_{número}.");

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