// EN: FluentValidation validator for FindAvailableSlotsQuery.
// VI: FluentValidation validator cho FindAvailableSlotsQuery.

using BookingService.API.Application.Queries;
using FluentValidation;

namespace BookingService.API.Application.Validations;

/// <summary>
/// EN: Validator for FindAvailableSlotsQuery.
/// VI: Validator cho FindAvailableSlotsQuery.
/// </summary>
public class FindAvailableSlotsQueryValidator : AbstractValidator<FindAvailableSlotsQuery>
{
    public FindAvailableSlotsQueryValidator()
    {
        RuleFor(x => x.ShopId)
            .NotEmpty()
            .WithMessage("Shop ID is required / Shop ID là bắt buộc");

        RuleFor(x => x.ServiceId)
            .NotEmpty()
            .WithMessage("Service ID is required / Service ID là bắt buộc");

        RuleFor(x => x.Date)
            .NotEmpty()
            .WithMessage("Date is required / Ngày là bắt buộc");

        RuleFor(x => x.ServiceDurationMinutes)
            .GreaterThan(0)
            .WithMessage("Service duration must be greater than 0 / Thời lượng dịch vụ phải lớn hơn 0")
            .LessThanOrEqualTo(480)
            .WithMessage("Service duration cannot exceed 8 hours / Thời lượng dịch vụ không được vượt quá 8 giờ");
    }
}
