public static async Task <IActionResult> TokblitzRaceRematch(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = Constants.Version + "/tokblitzracerematch/" + "{id}/" + "{answer}")] HttpRequest req, string id, bool answer,
            [SignalR(HubName = "multiplayer")] IAsyncCollector <SignalRMessage> signalRMessages, ILogger log)
        {
            //Read query info
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            // creates a new gameplyer from rquest body
            var Record = JsonConvert.DeserializeObject <GamePlayer>(requestBody);

            //Get the record rematch and put in the FetchedRecord variable
            Constants.CollectionId = "Games";
            var FetchedRecord = await Api <RematchRecord> .GetItemAsync(id, Constants.PkRequest(id));

            // checks if the userid of the one asking for rematch is the same with the userId player1 in the rematch record
            if (Record.UserId == FetchedRecord.Player1Id)
            {
                if (answer == true)
                {
                    // if true,  update the rematch record set the value of player1rematch to "true"
                    FetchedRecord.Player1Rematch = true;
                    // if yes,  update the rematch record set the value of player1rematch to "true"
                    FetchedRecord.Player1HasMadeDecision = true;
                    await Api <RematchRecord> .UpdateItemAsyncSaveGames(FetchedRecord.Id, FetchedRecord, Constants.PkRequest(FetchedRecord.Id));
                }
                else
                {
                    // if false,  update the rematch record set the value of player1rematch to "false"
                    FetchedRecord.Player1Rematch = false;
                    // if false,  update the rematch record set the value of player1rematch to "true"
                    FetchedRecord.Player1HasMadeDecision = true;
                    await Api <RematchRecord> .UpdateItemAsyncSaveGames(FetchedRecord.Id, FetchedRecord, Constants.PkRequest(FetchedRecord.Id));
                }
            }
            else if (Record.UserId == FetchedRecord.Player2Id)
            {
                if (answer == true)
                {
                    // if true,  update the rematch record set the value of player1rematch to "true"
                    FetchedRecord.Player2Rematch = true;
                    // if yes,  update the rematch record set the value of player1rematch to "true"
                    FetchedRecord.Player2HasMadeDecision = true;
                    await Api <RematchRecord> .UpdateItemAsyncSaveGames(FetchedRecord.Id, FetchedRecord, Constants.PkRequest(FetchedRecord.Id));
                }
                else
                {
                    // if false,  update the rematch record set the value of player1rematch to "false"
                    FetchedRecord.Player2Rematch = false;
                    // if false,  update the rematch record set the value of player1rematch to "true"
                    FetchedRecord.Player2HasMadeDecision = true;
                    await Api <RematchRecord> .UpdateItemAsyncSaveGames(FetchedRecord.Id, FetchedRecord, Constants.PkRequest(FetchedRecord.Id));
                }
            }


            var UpdatedFetchedRecord = await Api <RematchRecord> .GetItemAsync(id, Constants.PkRequest(id));


            // if both have decided
            if (UpdatedFetchedRecord.Player1HasMadeDecision == true && UpdatedFetchedRecord.Player2HasMadeDecision == true)
            {
                // if both yes
                if (UpdatedFetchedRecord.Player1Rematch == true && UpdatedFetchedRecord.Player2Rematch == true)
                {
                    TokBlitzRace gameInfo = new TokBlitzRace();
                    var          play1    = UpdatedFetchedRecord.Players[0];
                    play1.PlayerNumber  = 1;
                    Record.PlayerNumber = 2;
                    //var play2 = UpdatedFetchedRecord.Players[1];
                    gameInfo.Players.Add(play1);
                    gameInfo.Players.Add(Record);
                    gameInfo.RoomId = Guid.NewGuid().ToString();

                    UpdatedFetchedRecord.Player1Rematch         = false;
                    UpdatedFetchedRecord.Player2Rematch         = false;
                    UpdatedFetchedRecord.Player2HasMadeDecision = false;
                    UpdatedFetchedRecord.Player1HasMadeDecision = false;


                    await Api <RematchRecord> .UpdateItemAsyncSaveGames(UpdatedFetchedRecord.Id, UpdatedFetchedRecord, Constants.PkRequest(UpdatedFetchedRecord.Id));


                    //Get game toks
                    gameInfo.Toks = GetGameTokIds();
                    await signalRMessages.AddAsync(
                        new SignalRMessage
                    {
                        Target    = "new_game_rematch",
                        Arguments = new[] { gameInfo }
                    });


                    // if both have decided and player 1 is false and player 2 is true
                }
                else if (UpdatedFetchedRecord.Player1Rematch == false && UpdatedFetchedRecord.Player2Rematch == true)
                {
                    var getter = UpdatedFetchedRecord.Player2ConnectionId;
                    await signalRMessages.AddAsync(
                        new SignalRMessage
                    {
                        Target    = "new_game_rematch_denied",
                        Arguments = new[] { getter }
                    });


                    // if both have decided and player 2 is false and player 1 is true
                }
                else if (UpdatedFetchedRecord.Player2Rematch == false && UpdatedFetchedRecord.Player1Rematch == true)
                {
                    var getter = UpdatedFetchedRecord.Player1ConnectionId;
                    await signalRMessages.AddAsync(
                        new SignalRMessage
                    {
                        Target    = "new_game_rematch_denied",
                        Arguments = new[] { getter }
                    });
                }
            }
            // if only one player has decided
            else
            {
                UpdatedFetchedRecord.Players.Add(Record);

                var updated = await Api <RematchRecord> .UpdateItemAsyncSaveGames(UpdatedFetchedRecord.Id, UpdatedFetchedRecord, Constants.PkRequest(UpdatedFetchedRecord.Id));

                await signalRMessages.AddAsync(
                    new SignalRMessage
                {
                    Target    = "waiting_for_rematch",
                    Arguments = new[] { "Please Wait for your opponent" }
                });

                return(new OkObjectResult(updated));
            }


            return(new OkResult());
        }
        public static async Task <IActionResult> MultiplayerSetup(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = Constants.Version + "/multiplayersetup")] HttpRequest req,
            [SignalR(HubName = "multiplayer")] IAsyncCollector <SignalRMessage> signalRMessages, ILogger log)
        {
            //Read query info
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            var    player      = JsonConvert.DeserializeObject <GamePlayer>(requestBody);

            //Get list of players
            Constants.CollectionId = "Games";
            var lobby = await Api <TokGamesRoomBasic> .GetItemAsync("lobby", Constants.PkRequest("lobby"));

            lobby.WaitingPlayers.RemoveAll(x => x.UserId == player.UserId);

            if (lobby.WaitingPlayers.Count == 0)
            {   //Wait for other player
                lobby.WaitingPlayers.Add(player);


                await Api <TokGamesRoomBasic> .UpdateItemAsyncSaveGames("lobby", lobby, Constants.PkRequest("lobby"));

                await signalRMessages.AddAsync(
                    new SignalRMessage
                {
                    Target    = "waiting",
                    Arguments = new[] { player }
                });

                // await StatsFunctions.IncrementDayCounter(1);
            }
            else
            {
                //Match up with a waiting player
                var player1 = player;
                var player2 = lobby.WaitingPlayers.FirstOrDefault();

                TokBlitzRace gameInfo = new TokBlitzRace();
                player1.PlayerNumber = 1;
                player2.PlayerNumber = 2;
                gameInfo.Players.Add(player1);
                gameInfo.Players.Add(player2);
                gameInfo.RoomId = Guid.NewGuid().ToString();

                //Get game toks
                gameInfo.Toks = GetGameTokIds();

                //Remove once successful
                lobby.WaitingPlayers.RemoveAll(x => x.UserId == player2.UserId);
                await Api <TokGamesRoomBasic> .UpdateItemAsyncSaveGames("lobby", lobby, Constants.PkRequest("lobby"));

                await signalRMessages.AddAsync(
                    new SignalRMessage
                {
                    Target = "newgame",

                    Arguments = new[] { gameInfo }
                });

                // await StatsFunctions.IncrementDayCounter(1);
            }

            return(new OkResult());
        }