using FluentValidation;

namespace CMSMicroservice.Application.ManualPaymentCQ.Commands.CreateManualPayment;

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

        RuleFor(x => x.Amount)
            .GreaterThan(0)
            .WithMessage("مبلغ باید بزرگتر از صفر باشد")
            .LessThanOrEqualTo(1_000_000_000)
            .WithMessage("مبلغ نمی‌تواند بیشتر از 1 میلیارد ریال باشد");

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