using FluentValidation;

namespace CMSMicroservice.Application.DiscountShopCQ.Commands.UpdateDiscountProduct;

public class UpdateDiscountProductCommandValidator : AbstractValidator<UpdateDiscountProductCommand>
{
    public UpdateDiscountProductCommandValidator()
    {
        RuleFor(x => x.ProductId)
            .GreaterThan(0).WithMessage("شناسه محصول باید مثبت باشد");

        RuleFor(x => x.Title)
            .NotEmpty().WithMessage("عنوان محصول الزامی است")
            .MaximumLength(200).WithMessage("عنوان محصول نباید بیشتر از 200 کاراکتر باشد");

        RuleFor(x => x.ShortInfomation)
            .MaximumLength(500).WithMessage("توضیحات کوتاه نباید بیشتر از 500 کاراکتر باشد")
            .When(x => !string.IsNullOrEmpty(x.ShortInfomation));

        RuleFor(x => x.FullInformation)
            .MaximumLength(10000).WithMessage("توضیحات کامل نباید بیشتر از 10000 کاراکتر باشد")
            .When(x => !string.IsNullOrEmpty(x.FullInformation));

        RuleFor(x => x.Price)
            .GreaterThan(0).WithMessage("قیمت باید بزرگتر از صفر باشد");

        RuleFor(x => x.MaxDiscountPercent)
            .InclusiveBetween(0, 100).WithMessage("درصد تخفیف باید بین 0 تا 100 باشد");

        RuleFor(x => x.RemainingCount)
            .GreaterThanOrEqualTo(0).WithMessage("موجودی نمی‌تواند منفی باشد");

        RuleFor(x => x.CategoryIds)
            .NotEmpty().WithMessage("حداقل یک دسته‌بندی باید انتخاب شود")
            .Must(ids => ids.All(id => id > 0)).WithMessage("شناسه دسته‌بندی‌ها باید مثبت باشند");
    }
}
