using BookHive.DTO.Author;
using FastEndpoints;
using FluentValidation;

namespace BookHive.Validators.Authors;

public class CreateAuthorDtoValidator : Validator<CreateAuthorDto>
{
    public CreateAuthorDtoValidator()
    {
        RuleFor(x => x.FirstName)
            .NotEmpty()
            .WithMessage("First name is required.")
            .MaximumLength(100)
            .WithMessage("First name cannot exceed 100 characters.")
            .MinimumLength(2)
            .WithMessage("First name must exceed 2 characters.");

        RuleFor(x => x.LastName)
            .NotEmpty()
            .WithMessage("Last name is required.")
            .MaximumLength(100)
            .WithMessage("Last name cannot exceed 100 characters.")
            .MinimumLength(2)
            .WithMessage("Last name must exceed 2 characters.");

        RuleFor(x => x.Biography)
            .MaximumLength(2000)
            .WithMessage("Biography cannot exceed 2000 characters.")
            .MinimumLength(2)
            .WithMessage("Biography must exceed 2 characters.");

        RuleFor(x => x.BirthDate)
            .NotEmpty()
            .WithMessage("Birth date is required.")
            .LessThan(DateOnly.FromDateTime(DateTime.Now))
            .WithMessage("Birth date cannot be in the future.");

        RuleFor(x => x.Nationality)
            .NotEmpty()
            .WithMessage("Nationality is required.")
            .MaximumLength(60)
            .WithMessage("Nationality cannot exceed 60 characters.");
    }
}