using Application.Services.Database;
using FluentValidation;

namespace Application.Endpoints.MedicalHistories;

public class MedicalHistoryCreateValidation : AbstractValidator<MedicalHistoryDTO>
{
    private readonly IPacientRepository _pacientRepository;

    public MedicalHistoryCreateValidation(IPacientRepository pacientRepository)
    {
        _pacientRepository = pacientRepository;

        RuleFor(x => x.UserId)
            .NotEmpty().WithMessage("Pacient is required.")
            .MustAsync(BeExistingUser).WithMessage("Specified pacient id doesn't exist.");

        RuleFor(x => x.Description)
            .NotEmpty().WithMessage("Description is required.");
    }

    private async Task<bool> BeExistingUser(Guid userId, CancellationToken cancellationToken)
    {
        var pacient = await _pacientRepository.GetByIdAsync(userId);
        return pacient != null;
    }
}
