public async Task<IdentityResult> RegisterUser(PlayerModel userModel)
        {
            Player user = new Player
            {
                 UserName = userModel.UserName,
                 FirstName = userModel.FirstName,
                 LastName = userModel.LastName,
                 ContactNumber = userModel.ContactNumber,
                 Address1 = userModel.Address1,
                 Address2 = userModel.Address2,
                 Location = userModel.Location,
                 BirthDate = userModel.BirthDate,
                 Gender = userModel.Gender,
                 Email = userModel.Email
                 
            };
         
            IdentityUser identityUser = new IdentityUser
            {
                UserName = userModel.UserName
            };
            var result = await _userManager.CreateAsync(user,userModel.Password);

            return result;
        }
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            var userManager = context.OwinContext.GetUserManager<PlayerUserManager>();
           var player = new Player();
            
            AuthRepository repo = new AuthRepository();
                if(repo.FindUserByEmailAndPass(context.UserName, context.Password))
                {
                   player  = repo.FindUser(context.UserName);
                }
                else
                {
                    player.UserName = context.UserName;
                }

                
           Player user = await userManager.FindAsync(player.UserName, context.Password);
           if (!user.EmailConfirmed)
           {
               context.SetError("verification", "The account has not yet verified!");
               return;
           }
            if (user == null)
            {
                
                context.SetError("invalid_grant", "The user name or password is incorrect.");
                return;
                
            }

            ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
               OAuthDefaults.AuthenticationType);
            ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
                CookieAuthenticationDefaults.AuthenticationType);

            AuthenticationProperties properties = CreateProperties(user.UserName,user.IsPlayed);
            AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
            context.Validated(ticket);
            context.Request.Context.Authentication.SignIn(cookiesIdentity);
        }
        public async Task<IHttpActionResult> RegisterExternal(RegisterExternalBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var info = await Authentication.GetExternalLoginInfoAsync();
            if (info == null)
            {
                return InternalServerError();
            }

            var user = new Player() { UserName = model.Email, Email = model.Email };

            IdentityResult result = await UserManager.CreateAsync(user);
            if (!result.Succeeded)
            {
                return GetErrorResult(result);
            }

            result = await UserManager.AddLoginAsync(user.Id, info.Login);
            if (!result.Succeeded)
            {
                return GetErrorResult(result); 
            }
            return Ok();
        }
        public async Task<IHttpActionResult> Register(RegisterBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var user = new Player() { 
                UserName = model.UserName,
                Email = model.Email,
                Address1 = model.Address1,
                Address2 = model.Address2,
                BirthDate = model.BirthDate,
                FirstName = model.FirstName,
                LastName = model.LastName,
                Location = model.Location,
                Gender = model.Gender,
                ContactNumber = model.ContactNumber
            };

            IdentityResult result = await UserManager.CreateAsync(user, model.Password);

           
            if (!result.Succeeded)
            {
                return GetErrorResult(result);
            }

            PlayerModel account = new PlayerModel() { 
                UserName = user.UserName,
                Email = user.Email,
                FirstName = user.FirstName,
                LastName = user.LastName
            };

            var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
            var urlEncode = HttpUtility.UrlEncode(code);
            var callBackUrl = "/register/confirmation/" + user.Id + "/token?code=" + urlEncode; 
            await UserManager.SendEmailAsync(user.Id, "Confirm your Account !", "Please confirm your account by clicking this link: <a href=\""
                                               + callBackUrl + "\">link</a>");

            String message = new EmailMessage(account).ParseNotify();

           

            string url = "Please confirm your account by clicking this link: <a href=\"" +
                                               "http://"+ HttpContext.Current.Request.Url.Authority + callBackUrl + "\">link</a>";
            Email mail = new Email(MessageTemplate.MessageTitle, url, account);

            mail.SendEmail();

            return Ok();
        }