using HealthcareManagerUI.Models;
using HealthcareManagerUI.Services.Http;
namespace HealthcareManagerUI.Services.Authentication;

// In AuthenticationService.cs
public class AuthenticationService : IAuthenticationService
{
    private readonly IRequestHttpService _requestHttpService;
    private readonly string _apiUrl = "http://localhost:5151/api";

    public AuthenticationService(IRequestHttpService requestHttpService)
    {
        _requestHttpService = requestHttpService;
    }

    public async Task<BaseResponse> LoginDoctor(UserLoginModel userLoginModel)
    {
        try
        {
            var response = await _requestHttpService.PostAsync<BaseResponse>($"{_apiUrl}/Doctors/login", userLoginModel);
            return response;
        }
        catch (Exception ex)
        {
            return new BaseResponse
            {
                StatusCode = 400,
                Data = null,
                Message = ex.Message
            };
        }
    }

    public async Task<BaseResponse> LoginPatient(UserLoginModel userLoginModel)
    {
        try
        {
            var response = await _requestHttpService.PostAsync<BaseResponse>($"{_apiUrl}/Patients/login", userLoginModel);
            return response;
        }
        catch (Exception ex)
        {
            return new BaseResponse {
                StatusCode = 400,
                Data = null,
                Message = ex.Message
            };
        }
    }

    public async Task<BaseResponse> RegisterDoctor(UserRegisterModel userRegistrationModel)
    {
        try
        {
            var response = await _requestHttpService.PostAsync<BaseResponse>($"{_apiUrl}/Doctors/register", userRegistrationModel);
            return response;
        }
        catch (Exception ex)
        {
            return new BaseResponse
            {
                StatusCode = 400,
                Data = null,
                Message = ex.Message
            };
        }
    }

    public async Task<BaseResponse> RegisterPatient(UserRegisterModel userRegisterModel)
    {
        var patientRegisterDto = new PatientRegisterModel
        {
            Name = userRegisterModel.Name,
            Email = userRegisterModel.Email,
            Password = userRegisterModel.Password
        };

        try
        {
            var response = await _requestHttpService.PostAsync<BaseResponse>($"{_apiUrl}/Patients/register", userRegisterModel);
            return response;
        }
        catch (Exception ex)
        {
            return new BaseResponse
            {
                StatusCode = 400,
                Data = null,
                Message = ex.Message
            };
        }
    }

    public async Task<BaseResponse> ResetDoctorPassword(UserRegisterModel userResetPasswordModel)
    {
        try
        {
            var response = await _requestHttpService.PostAsync<BaseResponse>($"{_apiUrl}/Doctors/reset_password", userResetPasswordModel);
            return response;
        }
        catch (Exception ex)
        {
            return new BaseResponse
            {
                StatusCode = 400,
                Data = null,
                Message = ex.Message
            };
        }
    }

    public async Task<BaseResponse> ResetPatientPassword(UserRegisterModel userResetPasswordModel)
    {
        try
        {
            var response = await _requestHttpService.PostAsync<BaseResponse>($"{_apiUrl}/Patients/reset_password", userResetPasswordModel);
            return response;
        }
        catch (Exception ex)
        {
            return new BaseResponse
            {
                StatusCode = 400,
                Data = null,
                Message = ex.Message
            };
        }
    }
}
