public async Task <IActionResult> Index(Guid id, decimal sum, string bet)
        {
            if (!User.Identity.IsAuthenticated)
            {
                return(Json(new { status = "Error", message = "Need auth" }));
            }


            var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);

            var user = _db.Users.Find(new Guid(userId));

            if (!user.CanBet)
            {
                return(Json(new { status = "Error", message = "Access denied. Please, fill your passport data" }));
            }
            if (user.Money < sum)
            {
                return(Json(new { status = "Error", message = "Lack of balance" }));
            }

            var Match = _db.Matches
                        .SingleOrDefault(m => (m.Status.Equals(MatchStatus.Active) ||
                                               m.Status.Equals(MatchStatus.Waiting)) && m.Id.Equals(id));

            if (Match == null)
            {
                return(Json(new { status = "Error", message = "Match not found" }));
            }

            var Bet = _db.Bets.SingleOrDefault(b =>
                                               b.MatchId.Equals(id) && b.Description.Equals((MatchResult)Enum.Parse(typeof(MatchResult), bet)));

            if (Bet == null)
            {
                return(Json(new { status = "Error", message = "Bet not found " }));
            }


            user.Money -= sum;
            _db.Users.Update(user);

            var model = new UsersBets();

            model.UserId = new Guid(userId);
            model.BetId  = Bet.Id;
            model.Coef   = Bet.Coef;
            model.Money  = sum;
            model.Time   = DateTime.Now;
            model.Status = UserBetPaymentStatus.Waiting;
            _db.UsersBets.Add(model);
            _db.SaveChanges();

            //await _notify.AboutBetAsync(BetReason.Applyed, user.Email, model);


            return(Json(new { status = "success", betId = model.Id }));
        }
 public Task <bool> AboutBetAsync(BetReason reason, string email, UsersBets bet) =>
 _notifyAboutBet[reason].Invoke(email, bet);