/// <summary>
        /// Ավելացնում է email հաճախորդի տվյալներ մեջ
        /// </summary>
        /// <param name="emailAddress"></param>
        /// <param name="customerNumber"></param>
        private RegistrationActionResult AddEmailForCustomer(string emailAddress, ulong customerNumber)
        {
            var           result = new RegistrationActionResult();
            CustomerEmail email  = new CustomerEmail
            {
                emailType = new KeyValue(),
                email     = new Email(),
                quality   = new KeyValue(),
                priority  = new KeyValue()
            };

            email.priority.key       = 1;
            email.emailType.key      = 5;
            email.quality.key        = 1;
            email.email.emailAddress = emailAddress;

            var saveResult = _acbaOperationService.SaveCustomerEmail(customerNumber, email);

            if (saveResult.resultCode == 1)
            {
                result.ResultCode = CustomerRegistration.ResultCode.Normal;
            }
            else if (saveResult.resultCode == 2)
            {
                throw new Exception(saveResult.resultDescription);
            }

            return(result);
        }
        /// <summary>
        /// Ավելացնում է հեռախոսահամարը հաճախորդի տվյալներ մեջ
        /// </summary>
        /// <param name="phoneNumber"></param>
        /// <param name="customerNumber"></param>
        private RegistrationActionResult AddPhoneForCustomer(string phoneNumber, ulong customerNumber)
        {
            var result = new RegistrationActionResult();
            var phone  = new CustomerPhone();

            phone.phoneType         = new KeyValue();
            phone.phone             = new Phone();
            phone.priority          = new KeyValue();
            phone.priority.key      = 1;
            phone.phoneType.key     = 1;
            phone.phone.areaCode    = phoneNumber.Substring(3, 2);
            phone.phone.countryCode = "+374";
            phone.phone.phoneNumber = phoneNumber.Substring(5);
            phone.Checked           = new KeyValue
            {
                key = 1
            };

            var saveResult = _acbaOperationService.SaveCustomerPhone(customerNumber, phone);

            if (saveResult.resultCode == 1)
            {
                result.ResultCode = CustomerRegistration.ResultCode.Normal;
            }
            else if (saveResult.resultCode == 2)
            {
                throw new Exception(saveResult.resultDescription);
            }

            return(result);
        }
        public async static void SendNewAccountRegistrationData(string _email, string _password, string _firstName, string _lastName)
        {
            NewAccountDataModel model = new NewAccountDataModel()
            {
                Email     = _email,
                Password  = _password,
                FirstName = _firstName,
                LastName  = _lastName
            };

            string json = JsonConvert.SerializeObject(model);

            var requestMessage = new HttpRequestMessage(HttpMethod.Post, Constants.API_NEW_ACCOUNT_POST);

            requestMessage.Content = new StringContent(json);
            HttpResponseMessage response = await SendRequest(requestMessage);

            RegistrationResultEventArgs args = new RegistrationResultEventArgs();

            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                args.Successful = true;
                args.Message    = response.ReasonPhrase;
            }
            else
            {
                args.Successful = false;
                args.Message    = response.ReasonPhrase;
            }

            RegistrationActionResult?.Invoke(null, args);
        }
        /// <summary>
        /// Մինչ օնլայն բանկինգի գրանցման ստուգումներ
        /// </summary>
        /// <returns></returns>
        internal RegistrationActionResult ValidateAcbaOnlineCreating(RegistrationCustomerData customerData)
        {
            var resultValidation = new RegistrationActionResult
            {
                ResultCode = CustomerRegistration.ResultCode.Normal
            };

            if (!customerData.IsPhoneVerified)
            {
                resultValidation.ResultCode  = CustomerRegistration.ResultCode.ValidationError;
                resultValidation.Description = "Not verified phone";
                return(resultValidation);
            }

            if (!String.IsNullOrEmpty(customerData.UserName) && !String.IsNullOrEmpty(customerData.Password))
            {
                if (!(customerData.UserName.All(c => Char.IsLetterOrDigit(c)) &&
                      customerData.UserName.Length > 3 &&
                      customerData.Password.Length > 7 &&
                      customerData.Password.All(c => Char.IsLetterOrDigit(c)) &&
                      customerData.Password.Any(char.IsUpper) &&
                      customerData.Password.Any(char.IsNumber) &&
                      customerData.Password.Any(char.IsDigit)
                      ))
                {
                    resultValidation.ResultCode  = CustomerRegistration.ResultCode.ValidationError;
                    resultValidation.Description = "Login pass error";
                    return(resultValidation);
                }
            }
            else
            {
                resultValidation.ResultCode  = CustomerRegistration.ResultCode.ValidationError;
                resultValidation.Description = "UserName or password is empty";
                return(resultValidation);
            }

            if (String.IsNullOrEmpty(customerData.Email))
            {
                resultValidation.ResultCode  = CustomerRegistration.ResultCode.ValidationError;
                resultValidation.Description = "Email does not exist";
                return(resultValidation);
            }

            if (customerData.CustomerQuality != 1)
            {
                Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
                Match match = regex.Match(customerData.Email);
                if (!match.Success)
                {
                    resultValidation.ResultCode  = CustomerRegistration.ResultCode.ValidationError;
                    resultValidation.Description = "Email regexp error";
                    return(resultValidation);
                }
            }

            return(resultValidation);
        }
        /// <summary>
        /// Գեներացնում է օնլայն բանկինգ
        /// </summary>
        /// <param name="customerData"></param>
        /// <returns></returns>
        public RegistrationActionResult GenerateAcbaOnline(RegistrationCustomerData customerData)
        {
            var result       = new RegistrationActionResult();
            var actionResult = _xbManagementService.GenerateAcbaOnline(customerData.UserName, customerData.Password, customerData.CustomerNumber, customerData.PhoneNumber, customerData.CustomerQuality, customerData.Email);

            StringBuilder stringBuilder = new StringBuilder();

            if (actionResult?.Errors != null)
            {
                foreach (var item in actionResult.Errors)
                {
                    if (actionResult.Errors.Count() == 1)
                    {
                        stringBuilder = stringBuilder.Append(item.Description);
                    }
                    else
                    {
                        stringBuilder = stringBuilder.AppendLine(item.Description);
                    }
                }
                result.Description = stringBuilder.ToString();
            }
            if (actionResult.ResultCode == ResultCode.Normal)
            {
                result.ResultCode = CustomerRegistration.ResultCode.Normal;
            }
            else if (actionResult.ResultCode == ResultCode.ValidationError)
            {
                result.ResultCode = CustomerRegistration.ResultCode.ValidationError;
            }
            else
            {
                result.ResultCode = CustomerRegistration.ResultCode.Failed;
            }
            return(result);
        }
        public RegistrationActionResult ContinueRegistrationProcess(RegistrationCustomerData externalRegData, RegistrationProcessSteps step)
        {
            var result = new RegistrationActionResult();

            result.ResultCode = CustomerRegistration.ResultCode.Failed;
            this.CustomerData = _cache.Get <string, RegistrationCustomerData>("RegistrationCustomerData_" + externalRegData.RegistrationToken);
            if (this.CustomerData != null)
            {
                _cache.UpdateExpiration("RegistrationCustomerData_" + externalRegData.RegistrationToken, 15);
                switch (step)
                {
                case RegistrationProcessSteps.SendSMSVerificationCodeByRegistrationToken:
                    if (this.CustomerData.CustomerQuality != 1 && externalRegData.PhoneNumber.Length == 8 && externalRegData.PhoneNumber.All(c => Char.IsDigit(c)))
                    {
                        this.CustomerData.PhoneNumber = "374" + externalRegData.PhoneNumber;
                    }

                    this.CustomerData.VerificationCode = this.SendVerificationCode(this.CustomerData.PhoneNumber, 5, CustomerRegistrationVerificationSMSTypes.NumbersAndLetters);

                    result.ResultCode = ResultCode.Normal;
                    break;

                case RegistrationProcessSteps.CheckSMSVerificationCodeByRegistrationToken:
                    this.CustomerData.IsPhoneVerified = this.CustomerData.VerificationCode == externalRegData.VerificationCode;

                    if (this.CustomerData.NumberFailedVerificationCount < 3)
                    {
                        if (this.CustomerData.IsPhoneVerified)
                        {
                            this.CustomerData.VerificationCode = String.Empty;
                            if (CustomerData.CustomerQuality != 1)
                            {
                                result = this.AddPhoneForCustomer(this.CustomerData.PhoneNumber, this.CustomerData.CustomerNumber);
                            }
                            else
                            {
                                result.ResultCode = ResultCode.Normal;
                            }
                        }
                        else
                        {
                            result.Description = "Մուտքագրվել է սխալ մեկանգամյա գաղտնաբառ: Մուտքագրեք Բանկում գրանցված Ձեր հեռախոսահամարին ուղարկված մեկանգամյա գաղտնաբառը:";
                            this.CustomerData.NumberFailedVerificationCount++;
                        }
                    }
                    else
                    {
                        _cache.Remove("RegistrationCustomerData_" + externalRegData.RegistrationToken);
                        result.ResultCode  = ResultCode.ValidationError;
                        result.Description = "Դուք գերազանցել եք տվյալների սխալ մուտքագրման սահմանաչափը: Գործընթացը ավարտված է:";
                    }

                    break;

                case RegistrationProcessSteps.GenerateAcbaOnline:
                    this.CustomerData.UserName = externalRegData.UserName;
                    this.CustomerData.Password = externalRegData.Password;

                    if (this.CustomerData.CustomerQuality != 1)
                    {
                        this.CustomerData.Email = externalRegData.Email;
                    }

                    RegistrationActionResult validationResult = _onlineBankingRegistrationManager.ValidateAcbaOnlineCreating(this.CustomerData);
                    if (validationResult.ResultCode == ResultCode.Normal)
                    {
                        if (this.CustomerData.CustomerQuality != 1)
                        {
                            RegistrationActionResult saveEmailResult = this.AddEmailForCustomer(this.CustomerData.Email, this.CustomerData.CustomerNumber);

                            if (saveEmailResult.ResultCode == ResultCode.Normal)
                            {
                                result = _onlineBankingRegistrationManager.GenerateAcbaOnline(this.CustomerData);
                            }
                        }
                        else
                        {
                            result = _onlineBankingRegistrationManager.GenerateAcbaOnline(this.CustomerData);
                        }
                    }
                    else
                    {
                        result = validationResult;
                    }

                    break;
                }
            }
            else
            {
                result.Description = "Initilized customerdata is null";
            }
            return(result);
        }