public async Task <IActionResult> Register([Bind("id, UserName, Email, Password, PasswordConfirm, Phone, EmailConfirm")] AppUser appUser)
        {
            Message    = string.Empty;
            successMsg = string.Empty;

            if (ModelState.IsValid)
            {
                if (!string.IsNullOrEmpty(IsEmailConfirm()))
                {
                    if (IsEmailConfirm() == "true")
                    {
                        appUser.EmailConfirm = true;
                    }
                    else
                    {
                        appUser.EmailConfirm = false;
                    }
                }
                else
                {
                    appUser.EmailConfirm = false;
                }

                string input = appUser.Password;
                if (!string.IsNullOrEmpty(input))
                {
                    if (PasswordMinimumLength() > 0 && PasswordMaximumLength() > 0)
                    {
                        int min = PasswordMinimumLength();
                        int max = PasswordMaximumLength();
                        if (input.Length < min)
                        {
                            Message = "الخد الأدني لعدد احرف الباسوورد " + min + " مقاطع";
                            return(View());
                        }
                        if (input.Length > max)
                        {
                            Message = "الخد الأعلي لعدد احرف الباسوورد " + max + " مقاطع";
                            return(View());
                        }
                    }

                    if (!string.IsNullOrEmpty(IsPasswordDigit()))
                    {
                        string isdigit = IsPasswordDigit();
                        if (isdigit == "true")
                        {
                            if (!input.Any(char.IsDigit))
                            {
                                Message = "يجب ارفاق علي الاقل رقم واحد بكلمة المرور";
                                return(View());
                            }
                        }
                    }

                    if (!string.IsNullOrEmpty(IsPasswordUpper()))
                    {
                        string isupper = IsPasswordUpper();
                        if (isupper == "true")
                        {
                            if (!input.Any(char.IsUpper))
                            {
                                Message = "يجب ارفاق علي الاقل حرف كابيتال بكلمة المرور";
                                return(View());
                            }
                        }
                    }


                    appUser.Password        = AppHash.HashPassword(input);
                    appUser.PasswordConfirm = AppHash.HashPassword(input);

                    DataTable dt       = new DataTable();
                    Users     users    = new Users();
                    string    userName = appUser.UserName;
                    string    email    = appUser.Email;
                    dt = users.CheckUserNameExist(userName);

                    if (dt.Rows.Count < 1)
                    {
                        if (!IsEmailAddressExist(email))
                        {
                            int userCount = db.AppUsers.Count();

                            db.Add(appUser);
                            string userId = appUser.id;
                            await db.SaveChangesAsync();

                            string title = "تاكيد اشتراكك بموقع التجربة";
                            string body  = "مرحبا " + userName + "<br />";
                            body += "يرجي الضغط علي الرابط ادناه لتفعيل اشتراكك بموق التجربة" + "<br />" + "<br />";
                            body += "https://localhost:44313/Acount/AccountValidate?UId=" + userId;
                            if (SendEmail(email, body, title))
                            {
                                if (await InsertEmailConfirm(userId))
                                {
                                    successMsg = "تم انشاء حسابك بنجاح يرجي زيارة بريدك الالكتروني لتفعيل حسابك";
                                    if (!string.IsNullOrEmpty(IsSendEmailAfterRegister()))
                                    {
                                        if (IsSendEmailAfterRegister() == "true")
                                        {
                                            title = "شكرا لتسجيلك معنا بموقع التجربة";
                                            body  = "مرحبا " + userName + "<br />";
                                            body += "شكرا لتسجيلك معنا بموقع التجربة";
                                            SendEmail(email, body, title);
                                        }
                                    }
                                }
                                else
                                {
                                    Message = "خطأ بعملية اضافة الحساب, يرجي المحاولة لاحقا";
                                }
                            }
                            else
                            {
                                if (await InsertEmailConfirm(userId))
                                {
                                    Message = "تم انشاء حسابك بنجاح وتعذر ارسال رسالة التفعيل الي بريدك الالكتروني";
                                }
                            }

                            string roleId = string.Empty;
                            if (userCount <= 0)
                            {
                                AppRole appRole = new AppRole();
                                appRole.RoleName = "Admin";
                                await db.AddAsync(appRole);

                                await db.SaveChangesAsync();

                                roleId = appRole.id;

                                appRole.id       = Guid.NewGuid().ToString();
                                appRole.RoleName = "SuperVisor";
                                await db.AddAsync(appRole);

                                await db.SaveChangesAsync();

                                appRole.id       = Guid.NewGuid().ToString();
                                appRole.RoleName = "Member";
                                await db.AddAsync(appRole);

                                await db.SaveChangesAsync();

                                UserRole userRole = new UserRole();
                                userRole.RoleId = roleId;
                                userRole.UserId = userId;
                                await db.AddAsync(userRole);

                                await db.SaveChangesAsync();
                            }
                            else
                            {
                                roleId = Data.AppAuthentication.GetRoleId("Member");
                                if (!string.IsNullOrEmpty(roleId))
                                {
                                    UserRole userRole = new UserRole();
                                    userRole.RoleId = roleId;
                                    userRole.UserId = userId;
                                    await db.AddAsync(userRole);

                                    await db.SaveChangesAsync();
                                }
                            }

                            return(RedirectToAction(nameof(Register)));
                        }
                        else
                        {
                            Message = "البريد الالكتروني المدخل (" + email + ") غير متوفر";
                            return(View());
                        }
                    }
                    else
                    {
                        Message = "اسم المستخدم المدخل (" + userName + ") غير متوفر";
                        return(View());
                    }
                }
            }

            return(RedirectToAction(nameof(Register)));
        }