using Application.Endpoints.Doctors.Login;
using Application.Services.Database;
using Core.Entities;

namespace Application.Endpoints.Doctors.Registration;

public class DoctorRegistrationHandler
{
    private readonly IDoctorRepository _doctorRepository;

    public DoctorRegistrationHandler(IDoctorRepository doctorRepository)
    {
        _doctorRepository = doctorRepository;
    }

    public async Task<BaseResponse> Handle(DoctorRegistrationDto registrationDTO)
    {
        var validation = new DoctorRegistrationValidation(_doctorRepository);
        var validationResult = await validation.ValidateAsync(registrationDTO);

        if (!validationResult.IsValid)
        {
            var errorMessage = validationResult.Errors.Select(e => e.ErrorMessage).ToList();
            return new BaseResponse
            {
                Success = false,
                Message = string.Join(", ", errorMessage),
                Data = null
            };
        }

        var doctor = new Doctor
        {
            Email = registrationDTO.Email,
            Password = registrationDTO.Password,
            Name = registrationDTO.Name,
            Description = registrationDTO.Description
        };

        await _doctorRepository.AddAsync(doctor);

        return new BaseResponse
        {
            Success = true,
            Message = "Doctor registered successfully",
            Data = doctor // Be careful with sending sensitive data like Passwords
        };
    }
}
