public SeasonClassificationResponse(bool hasSeasonData, MultipleLineGraphData <X, Y>?graphData)
 {
     HasSeasonData = hasSeasonData;
     if (hasSeasonData)
     {
         if (graphData is null)
         {
             throw new ArgumentNullException(nameof(graphData));
         }
     }
     GraphData = graphData;
 }
        /// <summary>
        /// Get structured data about mmr relative to a group of players.
        /// </summary>
        public SeasonClassificationResponse <DateTime, int> GetMmrClassificationData(int?season = null)
        {
            season = season ?? _seasonService.CurrentSeason;
            if (!_seasonService.TryGetBoundaries(season.Value, out var boundaries))
            {
                return(new SeasonClassificationResponse <DateTime, int>(false, null));
            }

            IReadOnlyList <MmrSnapshot> data = GetMmrList(season.Value);

            DateTime[] timeValues          = data.Select(s => s.SnapshotTime).ToArray();
            var        classificationsData = new List <DataSet <int> >();

            foreach (var classification in boundaries !.MmrBoundaries)
            {
                IEnumerable <int> playerCountValues = data.Select(s => classification.GetPlayerCountInClassification(s));
                classificationsData.Add(new DataSet <int>(classification.Name, playerCountValues.ToArray()));
            }
            var graphData = new MultipleLineGraphData <DateTime, int>("Time", "Number of players", timeValues, classificationsData.ToArray());

            return(new SeasonClassificationResponse <DateTime, int>(true, graphData));
        }