using BookHive.DTO.Review;
using FastEndpoints;
using FluentValidation;

namespace BookHive.Validators.Reviews;

public class CreateReviewDtoValidator : Validator<CreateReviewDto>
{
    public CreateReviewDtoValidator()
    {
        RuleFor(x => x.MemberId)
            .GreaterThan(0)
            .WithMessage("Member id is invalid.");

        RuleFor(x => x.BookId)
            .GreaterThan(0)
            .WithMessage("Book id is invalid.");

        RuleFor(x => x.Rating)
            .InclusiveBetween(1, 5)
            .WithMessage(x => $"La note {x.Rating} est invalide. Elle doit être comprise entre 1 et 5.");

        When(x => x.Comment is not null, () =>
        {
            RuleFor(x => x.Comment)
                .MaximumLength(3000)
                .WithMessage("Comment cannot exceed 3000 characters.");
        });
    }
}