public ActionResult DisplayChallongeData(string challongeUrl)
        {
            var tournamentDataModel = new TournamentDataModel();
            var validUrl = _challongeApiUrlHelper.IsValidChallongeUrl(challongeUrl);           

            if (!validUrl)
            {
                tournamentDataModel.ErrorMessage = "Please enter a valid Challonge url.";
                return PartialView("_TournamentData", tournamentDataModel);
            }

            var matchesUrl = _challongeApiUrlHelper.ConvertUrlToMatchesUrl(challongeUrl);
            var participantsUrl = _challongeApiUrlHelper.ConvertUrlToParticipantsUrl(challongeUrl);
            var tournamentUrl = _challongeApiUrlHelper.ConvertToTournamentUrl(challongeUrl);

            tournamentDataModel.Matches = _asyncDataRetrivalHelper.Deserialize<List<RootChallongeMatch>>(matchesUrl);
            tournamentDataModel.Participants = _asyncDataRetrivalHelper.Deserialize<List<RootChallongeParticipant>>(participantsUrl);
            tournamentDataModel.Tournament = _asyncDataRetrivalHelper.Deserialize<RootChallongeTournament>(tournamentUrl);

            if (tournamentDataModel.Matches == null || tournamentDataModel.Participants == null || tournamentDataModel.Tournament == null)
                tournamentDataModel.ErrorMessage += "There was an error reaching Challonge";

            HttpContext.Session.Add(Settings.Default.SessionTournamentDataModel, tournamentDataModel);

            return PartialView("_TournamentData", tournamentDataModel);
        }
 public TournamentDataModel ReplaceChallongeIdsWithLocalIds(TournamentDataModel model, IEnumerable<string[]> matchedPlayers, IEnumerable<string[]> unmatchedPlayers)
 {
     var playerTags = Database.PlayerTags.ToList();
     model = ReplaceMatchedIds(model, playerTags, matchedPlayers);
     model = ReplaceUnmatchedIds(model, playerTags, unmatchedPlayers);
     return SwapChallongeIdsForRankingsId(model);
 }
 public TournamentRegistrationModel(TournamentDataModel tournamentDataModel)
 {
     MatchApiUrl = tournamentDataModel.MatchApiUrl;
     Matches = tournamentDataModel.Matches;
     Participants = tournamentDataModel.Participants;
     Tournament = tournamentDataModel.Tournament;
 }
        public MatchedPlayersModel Create(TournamentDataModel tournamentDataModel)
        {
            var model = _playerRegMatchHelper.MatchTagsToPlayers(tournamentDataModel.Participants);
            model.TournamentData = tournamentDataModel;
            model.MatchedPlayers = new MatchedPlayersListModel();

            model.UnmatchedPlayers.RegisteredPlayerTags = _tournamentRegHelper.GetNonparticipatingRegisteredPlayersAndTags(tournamentDataModel.Participants);
            model.MatchedPlayers.RegisteredPlayerTags = _tournamentRegHelper.GetParticipatingRegisteredPlayersAndTags(tournamentDataModel.Participants);

            return model;
        }
        private TournamentDataModel ReplaceUnmatchedIds(TournamentDataModel model, List<PlayerTag> playerTags, IEnumerable<string[]> unmatchedPlayers)
        {
            var playerTag = new PlayerTag();
            foreach (var unmatchedPlayer in unmatchedPlayers)
            {
                playerTag = ReplaceChallongeIdWithPlayerTag(playerTags, unmatchedPlayer[0]);

                model.Participants
                    .Single(x => x.participant.display_name == playerTag.PlayerGameTag)
                    .participant.tournament_id = playerTag.PlayerId;
            }
            
            return model;
        }
        private TournamentDataModel ReplaceMatchedIds(TournamentDataModel model, List<PlayerTag> playerTags, IEnumerable<string[]> matchedPlayers)
        {            
            var playerTag = new PlayerTag();
            foreach (var matchedPlayer in matchedPlayers)
            {                
                if (matchedPlayer.Length == 1)
                    playerTag = ReplaceChallongeIdWithPlayerTag(playerTags, matchedPlayer[0]);
                else if(matchedPlayer.Length == 2)
                    playerTag = ReplaceMatchedAssociatedId(playerTags, matchedPlayer);
                else
                    playerTag = ReplaceMatchedAssociatedById(playerTags, matchedPlayer[2]);

                model.Participants
                    .Single(x => x.participant.display_name == playerTag.PlayerGameTag)
                    .participant.tournament_id = playerTag.PlayerId;
            }

            return model;
        }
        private TournamentDataModel SwapChallongeIdsForRankingsId(TournamentDataModel model)
        {
            foreach(var particiapant in model.Participants)
            {
                foreach(var player1Matches in model.Matches.Where(x => x.match.player1_id == particiapant.participant.id))
                {
                    player1Matches.match.player1_id = particiapant.participant.tournament_id;
                }

                foreach (var player1Matches in model.Matches.Where(x => x.match.player2_id == particiapant.participant.id))
                {
                    player1Matches.match.player2_id = particiapant.participant.tournament_id;
                }

                foreach (var player1Matches in model.Matches.Where(x => x.match.winner_id == particiapant.participant.id))
                {
                    player1Matches.match.winner_id = particiapant.participant.tournament_id;
                }
            }

            return model;
        }
        public void SaveTournamentData(TournamentDataModel model, IEnumerable<string[]> matchedPlayers, IEnumerable<string[]> unmatchedPlayers, int tournamentId)
        {
            matchedPlayers = matchedPlayers ?? new List<string[]>();
            unmatchedPlayers = unmatchedPlayers ?? new List<string[]>();
            AddIdentifiersToRegisteredTags(matchedPlayers);
            AssociateUnmatchedPlayer(unmatchedPlayers);
            SaveUnmatchedPlayers(unmatchedPlayers, tournamentId);
            Database.SaveChanges();

            model = _convertChallongeHelper.ReplaceChallongeIdsWithLocalIds(model, matchedPlayers, unmatchedPlayers);

            ChangeMatchedTagIdForPlayerId(matchedPlayers);
            SaveAttendees(model, tournamentId);
            SaveMatches(model, tournamentId);

            Database.SaveChanges();
        }
        private void SaveAttendees(TournamentDataModel model, int tournamentId)
        {
            var attendeeIds = model.Participants.Select(x => x.participant.tournament_id);

            foreach(var id in attendeeIds)
            {
                Database.TournamentAttendees.Add(
                    new TournamentAttendee
                    {
                        TournamentId = tournamentId,
                        PlayerId = id
                    }
                );
            }
        }
 private void SaveMatches(TournamentDataModel model, int tournamentId)
 {
     Database.Matches.AddRange(model.Matches.ToDbMatch(tournamentId));
 }