using FluentValidation;

namespace SIGCM2.Application.Products.Create;

public sealed class CreateProductCommandValidator : AbstractValidator<CreateProductCommand>
{
    public CreateProductCommandValidator()
    {
        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.MedioId)
            .GreaterThan(0).WithMessage("MedioId debe ser un entero positivo.");

        RuleFor(x => x.ProductTypeId)
            .GreaterThan(0).WithMessage("ProductTypeId debe ser un entero positivo.");

        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.");
    }
}
