using FluentValidation;

namespace CMSMicroservice.Application.PublicMessageCQ.Commands.CreatePublicMessage;

public class CreatePublicMessageCommandValidator : AbstractValidator<CreatePublicMessageCommand>
{
    public CreatePublicMessageCommandValidator()
    {
        RuleFor(x => x.Title)
            .NotEmpty().WithMessage("عنوان پیام الزامی است")
            .MaximumLength(200).WithMessage("عنوان نمی‌تواند بیشتر از 200 کاراکتر باشد");

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

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

        RuleFor(x => x.Priority)
            .IsInEnum().WithMessage("اولویت پیام نامعتبر است");

        RuleFor(x => x.StartsAt)
            .NotEmpty().WithMessage("تاریخ شروع الزامی است")
            .LessThan(x => x.ExpiresAt).WithMessage("تاریخ شروع باید قبل از تاریخ پایان باشد");

        RuleFor(x => x.ExpiresAt)
            .NotEmpty().WithMessage("تاریخ پایان الزامی است")
            .GreaterThan(DateTime.Now).WithMessage("تاریخ پایان باید در آینده باشد");

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

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