using CMSMicroservice.Domain.Common;
using FluentValidation;

namespace CMSMicroservice.Application.ManualPaymentCQ.Commands.CreateManualPayment;

public class CreateManualPaymentCommandValidator : AbstractValidator<CreateManualPaymentCommand>
{
    public CreateManualPaymentCommandValidator()
    {
        RuleFor(x => x.UserId)
            .GreaterThan(0)
            .WithMessage("شناسه کاربر باید بزرگتر از صفر باشد");

        // مبلغ از پکیج خوانده می‌شود — فیلد Amount دیگر اعتبارسنجی نمی‌شود
        RuleFor(x => x.PackageId)
            .GreaterThanOrEqualTo(0)
            .WithMessage("شناسه پکیج نامعتبر است");

        RuleFor(x => x.Type)
            .IsInEnum()
            .WithMessage("نوع تراکنش نامعتبر است");

        RuleFor(x => x.Description)
            .NotEmpty()
            .WithMessage("توضیحات الزامی است")
            .MaximumLength(1000)
            .WithMessage("توضیحات نمی‌تواند بیشتر از 1000 کاراکتر باشد");

        RuleFor(x => x.ReferenceNumber)
            .MaximumLength(100)
            .WithMessage("شماره مرجع نمی‌تواند بیشتر از 100 کاراکتر باشد")
            .When(x => !string.IsNullOrEmpty(x.ReferenceNumber));
    }
}
