private static void AddGame(GameStats game, bool today = false)
 {
     if(game.Result == GameResult.Win)
     {
         TotalWon++;
         if(today)
             WonToday++;
     }
     else if(game.Result == GameResult.Loss)
     {
         TotalLost++;
         if(today)
             LostToday++;
     }
     // ignore Draw and "other" results
 }
 private static bool IsLatest(GameStats latest, GameStats game)
 {
     return game.StartTime >= latest.StartTime;
 }
        private static SeasonSummary Summarize(List<DeckStats> stats)
        {
            int highRank = -1;
            GameStats latest = new GameStats();
            latest.StartTime = DateTime.Now.AddMonths(-1);

            foreach(var deck in stats)
            {
                foreach(var game in deck.Games)
                {
                    if(IsRanked(game) && IsThisSeason(game) && IsOnThisServer(game))
                    {
                        AddGame(game, IsToday(game));
                        if(IsLatest(latest, game))
                        {
                            latest = game;
                        }
                        // TODO: not sure what happens with legend ranks?
                        if(game.Rank < highRank || highRank <= 0)
                        {
                            highRank = game.Rank;
                        }
                    }
                }
            }

            return new SeasonSummary(TotalWon, TotalLost, latest.Rank, WonToday, LostToday, highRank);
        }
 private static bool IsToday(GameStats g)
 {
     return g.StartTime >= StartOfToday && g.StartTime <= EndOfToday;
 }
 private static bool IsThisSeason(GameStats g)
 {
     return g.StartTime >= FirstOfMonth && g.StartTime <= LastOfMonth;
 }
 private static bool IsRanked(GameStats g)
 {
     return g.GameMode == GameMode.Ranked;
 }
 private static bool IsOnThisServer(GameStats g)
 {
     return g.Region == Server;
 }