//public async Task<RegisterResponseModel> Register(RegisterRequestModel model)
        //{
        //    model.Email = model.Email.Trim().ToLower();
        //
        //    ApplicationUser user = _unitOfWork.Repository<ApplicationUser>().Find(x => x.Email.ToLower() == model.Email);
        //
        //    if (user != null && user.EmailConfirmed)
        //        throw new CustomException(HttpStatusCode.UnprocessableEntity, "email", "Email is already registered");
        //
        //    if (user == null)
        //    {
        //        user = new ApplicationUser
        //        {
        //            Email = model.Email,
        //            UserName = model.Email,
        //            IsActive = true,
        //            RegistratedAt = DateTime.UtcNow,
        //        };
        //
        //        var result = await _userManager.CreateAsync(user, model.Password);
        //
        //        if (!result.Succeeded)
        //            throw new CustomException(HttpStatusCode.BadRequest, "general", result.Errors.FirstOrDefault().Description);
        //
        //        result = await _userManager.AddToRoleAsync(user, Role.User);
        //
        //        if (!result.Succeeded)
        //            throw new CustomException(HttpStatusCode.BadRequest, "general", result.Errors.FirstOrDefault().Description);
        //    }
        //
        //    try
        //    {
        //        await SendConfirmEmailLink(user);
        //    }
        //    catch (Exception ex)
        //    {
        //        await _userManager.DeleteAsync(user);
        //        throw;
        //    }
        //
        //    return new RegisterResponseModel { Email = user.Email };
        //}

        public async Task <RegisterUsingPhoneResponseModel> RegisterUsingPhone(RegisterUsingPhoneRequestModel model)
        {
            if (_unitOfWork.Repository <ApplicationUser>().Find(x => x.PhoneNumberConfirmed && x.PhoneNumber == model.PhoneNumber) != null)
            {
                throw new CustomException(HttpStatusCode.UnprocessableEntity, "phone", "Phone is already registered");
            }

            bool smsSent = false;

            try
            {
                var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(model.Password);
                var password       = Convert.ToBase64String(plainTextBytes);

                var data = JsonConvert.SerializeObject(new RegisterWithPhoneInternalModel
                {
                    Phone    = model.PhoneNumber,
                    Password = password
                }, new JsonSerializerSettings {
                    Formatting = Formatting.Indented
                });

                smsSent = await _smsService.SendVerificationCodeAsync(model.PhoneNumber, VerificationCodeType.Confirm, data);
            }
            catch (SystemException ex)
            {
                throw new CustomException(HttpStatusCode.BadRequest, "general", "Error while sending message");
            }

            return(new RegisterUsingPhoneResponseModel
            {
                Phone = model.PhoneNumber,
                SMSSent = smsSent
            });
        }
        public async Task <IActionResult> Register([FromBody] RegisterUsingPhoneRequestModel model)
        {
            var response = await _bridgeAbstractionUserPhone(BridgeType.UserPhone).Register(model); // use bridge

            return(Json(new JsonResponse <BridgeRegisterResponseModel>(response)));
        }