public async Task<ActionResult> Login(LoginRegisterViewModel model, string returnUrl)
        {
            LoginViewModel loginModel = model.LoginViewModel;

            if (!ModelState.IsValid)
            {
                return View("LoginRegister", model);
            }
            else if (string.IsNullOrWhiteSpace(loginModel.LoginEmail) || string.IsNullOrWhiteSpace(loginModel.LoginPassword))
            {
                if (string.IsNullOrWhiteSpace(loginModel.LoginEmail))
                {
                    ModelState.AddModelError("LoginEmail", "Please, enter email.");
                }

                if (string.IsNullOrWhiteSpace(loginModel.LoginPassword))
                {
                    ModelState.AddModelError("LoginPassword", "Please, enter password.");
                }

                return View("LoginRegister", model);
            }

            string userName = UserManager.FindByEmail(loginModel.LoginEmail).UserName;

            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, change to shouldLockout: true
            var result = await SignInManager.PasswordSignInAsync(userName, loginModel.LoginPassword, loginModel.LoginRememberMe, shouldLockout: false);
            switch (result)
            {
                case SignInStatus.Success:
                    {
                        if (null != Session["Cart"])
                        {
                            Guid userId = Guid.Parse(UserManager.FindByEmail(loginModel.LoginEmail).Id);
                            Cart sessionCart = (Cart)Session["Cart"];

                            UpdateDbCart((cart, context) =>
                            {
                                foreach (CartItem item in sessionCart.CartItems)
                                {
                                    CartItem savedItem = cart.CartItems.Where(x => x.Product.Id == item.Product.Id).FirstOrDefault();
                                    if (null == savedItem)
                                        cart.CartItems.Add(new CartItem(item.Product, item.Quontity));
                                    else
                                        savedItem.Quontity += item.Quontity;
                                }
                            }, userId);

                            Session["Cart"] = null;
                        }


                        return RedirectToLocal(returnUrl);
                    }
                //case SignInStatus.LockedOut:
                //    return View("Lockout");
                //case SignInStatus.RequiresVerification:
                //    return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
                case SignInStatus.Failure:
                default:
                    ModelState.AddModelError("", "Email or Password is incorrect. Please, try again.");
                    return View("LoginRegister", model);
            }
        }
        public async Task<ActionResult> Register(LoginRegisterViewModel model)
        {
            RegisterViewModel registerModel = model.RegisterViewModel;

            if (!ModelState.IsValid)
            {
                return View("LoginRegister", model);
            }
            else if (string.IsNullOrWhiteSpace(registerModel.RegisterEmail) ||
                        string.IsNullOrWhiteSpace(registerModel.RegisterPassword) ||
                        string.IsNullOrWhiteSpace(registerModel.RegisterName))
            {
                if (string.IsNullOrWhiteSpace(registerModel.RegisterEmail))
                {
                    ModelState.AddModelError("RegisterEmail", "Please, enter email.");
                }

                if (string.IsNullOrWhiteSpace(registerModel.RegisterPassword))
                {
                    ModelState.AddModelError("RegisterPassword", "Please, enter password.");
                }

                if (string.IsNullOrWhiteSpace(registerModel.RegisterName))
                {
                    ModelState.AddModelError("RegisterName", "Please, enter user name.");
                }

                return View("LoginRegister", model);
            }

            var user = new ApplicationUser { UserName = registerModel.RegisterName, Email = registerModel.RegisterEmail };
            var result = await UserManager.CreateAsync(user, registerModel.RegisterPassword);
            if (result.Succeeded)
            {
                await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);

                ApplicationUser addedUser = UserManager.FindByEmail(user.Email);
                Guid userId = Guid.Parse(addedUser.Id);

                using (ApplicationContext context = new ApplicationContext())
                {
                    UserDetail detail = new UserDetail();
                    detail.UserId = userId;
                    detail.Name = addedUser.UserName;
                    context.Set<UserDetail>().Add(detail);

                    Cart cart = context
                                .Set<Cart>()
                                .Include("CartItems.Product")
                                .Where(x => x.UserId == userId)
                                .FirstOrDefault();

                    if (null == cart)
                    {
                        context.Set<Cart>().Add(new Cart(userId));
                    }

                    context.SaveChanges();
                }

                if (null != Session["Cart"])
                {
                    Cart sessionCart = (Cart)Session["Cart"];

                    UpdateDbCart((cart, context) =>
                    {
                        foreach (CartItem item in sessionCart.CartItems)
                        {
                            CartItem savedItem = cart.CartItems.Where(x => x.Product.Id == item.Product.Id).FirstOrDefault();
                            if (null == savedItem)
                                cart.CartItems.Add(new CartItem(item.Product, item.Quontity));
                            else
                                savedItem.Quontity += item.Quontity;
                        }
                    }, userId);

                    Session["Cart"] = null;
                }

                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                // Send an email with this link
                // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                return RedirectToAction("Index", "Product");
            }
            //    AddErrors(result);
            //}

            //// If we got this far, something failed, redisplay form
            return View("LoginRegister", model);
        }