namespace CMSMicroservice.Application.ProductsCQ.Commands.BulkUpdateProductPrices;

public class BulkUpdateProductPricesCommandValidator : AbstractValidator<BulkUpdateProductPricesCommand>
{
    public BulkUpdateProductPricesCommandValidator()
    {
        RuleFor(x => x.Products)
            .NotEmpty().WithMessage("لیست محصولات نمی‌تواند خالی باشد")
            .Must(x => x.Count <= 100).WithMessage("حداکثر 100 محصول در هر بار قابل به‌روزرسانی است");

        RuleForEach(x => x.Products).ChildRules(product =>
        {
            product.RuleFor(p => p.ProductId)
                .GreaterThan(0).WithMessage("شناسه محصول باید بزرگتر از 0 باشد");

            product.RuleFor(p => p.NewPrice)
                .GreaterThanOrEqualTo(0).WithMessage("قیمت نمی‌تواند منفی باشد");

            product.RuleFor(p => p.NewDiscount)
                .InclusiveBetween(0, 100)
                .When(p => p.NewDiscount.HasValue)
                .WithMessage("درصد تخفیف باید بین 0 تا 100 باشد");
                
            product.RuleFor(p => p.NewClubDiscountPercent)
                .InclusiveBetween(0, 100)
                .When(p => p.NewClubDiscountPercent.HasValue)
                .WithMessage("درصد تخفیف باشگاه باید بین 0 تا 100 باشد");
        });
    }
}
