private static IEnumerable<UpdatePlayerPositionInfo> GetUpdatePlayerPositionInfos(CompetitionPosition[] qualifyingPlayersPositions, MatchHeaderInfo[] orderedMatches)
    {
        var matchIndex = 0;
        var positionIndex = 0;
        var results =  qualifyingPlayersPositions.Select(position => {
            var result = default(UpdatePlayerPositionInfo);
            if (position.PlayerId.HasValue)
            {
                result = new UpdatePlayerPositionInfo {
                    PlayerId = position.PlayerId.Value,
                    MatchId = orderedMatches[matchIndex].Id,
                    Position = positionIndex % 2
                };
            }
            positionIndex++;
            if ((positionIndex % 2) == 0)
            {
                matchIndex++;
            }
            return result;
        });

        return results;
    }
    public UpdatePlayerPositionInfo AddPlayerToSection(int playerId, CompetitionSection section, CompetitionDetails details)
    {

        var result = default(UpdatePlayerPositionInfo);


            // rounds are in descending order, so first will be the max
            var maxRound = details.Matches.Where(m => m.Section == section).Max(m => m.Round);
            var match =
                details.Matches.FirstOrDefault(
                    m => m.Section == section && m.Round == 1 && (m.Player1.IsNull() || m.Player2.IsNull()));
            if (match.IsNotNull())
            {
                result = new UpdatePlayerPositionInfo();
                result.MatchId = match.Id;
                result.PlayerId = playerId;
                result.Position = match.Player1.IsNull() ? 0 : 1;
            }
        
        return result;
    }