using ApplicationLayer.InfrastructureServicesInterfaces;
using ApplicationLayer.Services.Applicants.NeededServices;
using ApplicationLayer.Services.AuthServices.NeededServices;
using ApplicationLayer.Services.AuthServices.Requests;
using AutoMapper;
using Domains.ApplicantDomain;
using Domains.Users;
namespace ApplicationLayer.Services.AuthServices.RegisterService;
/// 
public class RegisterService(
    IUsersRepository users,
    IApplicantsRepository applicants,
    IUnitOfWork unitOfWork,
    IMapper mapper) : IRegisterService
{
    async Task IRegisterService.RegisterApplicant(RegisterApplicantRequest request, CancellationToken cancellationToken)
    {
        var user = mapper.Map(request.RegisterRequest.AuthData);
        user.Role = Role.Applicant;
        var applicant = mapper.Map(request);
        applicant.UserId = user.Id;
        await users.AddAsync(user, cancellationToken);
        await applicants.AddAsync(applicant, cancellationToken);
        await unitOfWork.SaveAsync(cancellationToken);
    }
    async Task IRegisterService.RegisterAuthority(RegisterRequest request, CancellationToken cancellationToken)
    {
        var user = mapper.Map(request.AuthData);
        user.Role = Role.ApprovingAuthority;
        await users.AddAsync(user, cancellationToken);
        await unitOfWork.SaveAsync(cancellationToken);
    }
}