public async Task <IAccountResponse> ForgotPass(ForgotPassword view)
        {
            try
            {
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  input : {view.ToJsonString()} UserIPAddress: {  _userIPAddress.GetUserIP().Result }");
                var userInfo = await _appDbContext.UserInfos.Include(k => k.User).FirstOrDefaultAsync(x => x.Email == view.Email);

                ViewModels.ValidateOtp validateOtp = new ViewModels.ValidateOtp();
                if (userInfo == null)
                {
                    return(new AccountResponse(new ViewModels.UserRegistration
                    {
                        Success = false,
                        CustomStatusCode = CustomStatusCode.NotRegisteredEmailID,
                        Message = ClientMessageConstant.NotRegisteredEmailId
                    }));
                }
                else
                {
                    var profileInfo = await _appDbContext.Profiles.FirstOrDefaultAsync(x => x.Id == userInfo.Id);

                    var userName = view.LanguageType == LanguageType.EN ? userInfo.User.NameEn : userInfo.User.NameAr;

                    var emailResult = await _emailService.SendResetPasswordEmailAsync(userInfo.Email, userName, view.LanguageType);

                    validateOtp.UserId = userInfo.UserId;
                    validateOtp.Otp    = userInfo.OTP;
                    userInfo.OTP       = emailResult.OTP;
                    userInfo.Modified  = DateTime.Now;
                    _appDbContext.UserInfos.Update(userInfo);
                    await _appDbContext.SaveChangesAsync();



                    return(new AccountResponse(new ViewModels.UserRegistration
                    {
                        Id = userInfo.UserId,
                        FirstName = profileInfo.FirstNameEn,
                        LastName = profileInfo.LastNameEn,
                        Success = true,
                        CustomStatusCode = CustomStatusCode.Success,
                        Message = ClientMessageConstant.Success
                    }));
                }
            }
            catch (System.Exception ex)
            {
                //Message = $"An error occurred when resetting password: {ex.Message}";
                return(new AccountResponse(new ViewModels.UserRegistration
                {
                    Success = false,
                    CustomStatusCode = CustomStatusCode.FunctionalError,
                    Message = ClientMessageConstant.WeAreUnableToProcessYourRequest
                }, ex));
            }
        }
        public async Task <IAccountResponse> ForgotEmailID(ViewModels.ForgotEmail view)
        {
            try
            {
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  input : {view.ToJsonString()} UserIPAddress: {  _userIPAddress.GetUserIP().Result }");
                var profileInfo = await _appDbContext.Profiles.FirstOrDefaultAsync(x => x.Eid == view.EmirateID);

                ViewModels.ValidateOtp Votp = new ViewModels.ValidateOtp();
                if (profileInfo == null)
                {
                    return(new AccountResponse(new ViewModels.UserRegistration
                    {
                        Success = false,
                        CustomStatusCode = CustomStatusCode.NotRegisteredEmiratesID,
                        Message = ClientMessageConstant.NotRegisteredEmiratesId
                    }));
                }
                else
                {
                    var userInfo = await _appDbContext.UserInfos.FirstOrDefaultAsync(x => x.UserId == profileInfo.Id);

                    //EMailProvider emailSet = new EMailProvider(_settings.SmtpUsername, _settings.SmtpPassword, _settings.SmtpHost, _settings.SmtpPort);
                    //SendOtpEmail(emailSet, _settings.SmtpUsername, userInfo.Email, userInfo.otp);


                    //Votp.UserId = userInfo.UserId;
                    //Votp.Otp = userInfo.otp;

                    //Message = _settings.Success;
                    return(new AccountResponse(new ViewModels.UserRegistration
                    {
                        Id = userInfo.UserId,
                        FirstName = profileInfo.FirstNameEn,
                        LastName = profileInfo.LastNameEn,
                        Email = userInfo.Email,
                        //UserId = userInfo.UserId,
                        //Otp = userInfo.otp,
                        Success = true,
                        CustomStatusCode = CustomStatusCode.Success,
                        Message = ClientMessageConstant.Success
                    }));
                }
            }
            catch (System.Exception ex)
            {
                //Message = $"An error occurred when resetting password: {ex.Message}";
                return(new AccountResponse(new ViewModels.UserRegistration
                {
                    Success = false,
                    CustomStatusCode = CustomStatusCode.FunctionalError,
                    Message = ClientMessageConstant.WeAreUnableToProcessYourRequest
                }, ex));
            }
        }
        public async Task <IResponse <ViewModels.ValidateOtp> > ValidateOtp(ViewModels.ValidateOtp view)
        {
            try
            {
                logger.Info($"{ GetType().Name}  {  ExtensionUtility.GetCurrentMethod() }  input : {view.ToJsonString()} UserIPAddress: {  _userIPAddress.GetUserIP().Result }");
                var userInfo = await _appDbContext.UserInfos.FirstOrDefaultAsync
                               (
                    x => x.UserId == view.UserId &&
                    x.OTP == view.Otp);

                if (userInfo == null)
                {
                    return(new OTPResponce(new ViewModels.ValidateOtp
                    {
                        Success = false,
                        CustomStatusCode = CustomStatusCode.OTPExpiredOrInvalid,
                        Message = ClientMessageConstant.OTPExpiredOrInvalid
                    }));
                }

                //userInfo.TokenIsCompleted = true;
                userInfo.IsActive = true;
                userInfo.CanLogin = true;
                userInfo.Modified = DateTime.Now;
                _appDbContext.UserInfos.Update(userInfo);
                await _appDbContext.SaveChangesAsync();

                return(new OTPResponce(new ViewModels.ValidateOtp
                {
                    UserId = view.UserId,
                    Otp = view.Otp,
                    Success = true,
                    CustomStatusCode = CustomStatusCode.Success,
                    Message = ClientMessageConstant.Success
                }));
            }
            catch (System.Exception ex)
            {
                //Message = $"An error occurred when resetting password: {ex.Message}";
                return(new OTPResponce(new ViewModels.ValidateOtp
                {
                    UserId = view.UserId,
                    Otp = view.Otp,
                    Success = false,
                    CustomStatusCode = CustomStatusCode.FunctionalError,
                    Message = ClientMessageConstant.WeAreUnableToProcessYourRequest
                }));
            }
        }