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

using BookingService.API.Application.Commands;
using FluentValidation;

namespace BookingService.API.Application.Validations;

/// <summary>
/// EN: Validator for CreateAppointmentCommand ensuring all required fields are valid.
/// VI: Validator cho CreateAppointmentCommand đảm bảo tất cả trường bắt buộc hợp lệ.
/// </summary>
public class CreateAppointmentCommandValidator : AbstractValidator<CreateAppointmentCommand>
{
    public CreateAppointmentCommandValidator()
    {
        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.StartTime)
            .NotEmpty()
            .WithMessage("Start time is required / Thời gian bắt đầu là bắt buộc")
            .GreaterThan(DateTime.UtcNow.AddMinutes(-5))
            .WithMessage("Start time must be in the future / Thời gian bắt đầu phải ở tương lai");

        RuleFor(x => x.EndTime)
            .NotEmpty()
            .WithMessage("End time is required / Thời gian kết thúc là bắt buộc")
            .GreaterThan(x => x.StartTime)
            .WithMessage("End time must be after start time / Thời gian kết thúc phải sau thời gian bắt đầu");

        RuleFor(x => x.Notes)
            .MaximumLength(1000)
            .WithMessage("Notes cannot exceed 1000 characters / Ghi chú không được vượt quá 1000 ký tự");
    }
}
