public async Task <Halo3StatModel> GetHalo3StatsFromBungie(string gamerTag)
        {
            Halo3StatModel haloStatModel = new Halo3StatModel();

            if (string.IsNullOrWhiteSpace(gamerTag))
            {
                return(await Task.FromResult(haloStatModel));
            }
            else
            {
                WebClient client           = new WebClient();
                string    downloadedString = client.DownloadString(Constants.Halo3Constants.UrlBase + gamerTag);

                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(downloadedString);

                List <string> cleanedResult = new List <string>();

                // TODO: This currently gets the right divs, but it also grabs others that I don't need.
                // Need to collect the ones that I need and then parse what I need out of them
                foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[contains(@class, 'halo3')]"))
                {
                    string value = node.InnerText;
                    cleanedResult.AddRange(GetCleanAndSplitHalo3StatsFromBungie(value));
                }

                haloStatModel = ParseHalo3StatsFromBungie(cleanedResult);

                return(await Task.FromResult(haloStatModel));
            }
        }
        /**
         * SageOfChaos : Total Halo 3 Games: Total Games: 1720
         */
        public async Task GetHalo3StatsFromBungie_Goldenflow(string gamerTag)
        {
            // Arrange
            // Do nothing

            // Act
            Halo3StatModel result = await _sut.GetHalo3StatsFromBungie(gamerTag);

            // Assert
            Assert.IsTrue(result.TotalGames == 1720);
            Assert.IsTrue(result.TotalExp == 1171);
            Assert.IsTrue(result.HighestSkill == 48);
            Assert.IsTrue(result.RankedKdRatio == float.Parse("1.37"));
            Assert.IsTrue(result.TotalRankedKills == 11681);
            Assert.IsTrue(result.TotalRankedDeaths == 8545);
            Assert.IsTrue(result.TotalRankedGames == 865);
            Assert.IsTrue(result.SocialKdRatio == float.Parse("1.70"));
            Assert.IsTrue(result.TotalSocialKills == 11811);
            Assert.IsTrue(result.TotalSocialDeaths == 6929);
            Assert.IsTrue(result.TotalSocialGames == 855);
        }
        private Halo3StatModel ParseHalo3StatsFromBungie(List <string> htmlStats)
        {
            Halo3StatModel haloStatModel = new Halo3StatModel();

            for (int i = 0; i < htmlStats.Count; i++)
            {
                string stat = htmlStats[i];
                if (stat.Contains(Constants.Halo3Constants.TotalGames, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.TotalGames = int.Parse(htmlStats[i + 1]);
                }
                else if (stat.Contains(Constants.Halo3Constants.TotalExp, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.TotalExp = int.Parse(htmlStats[i + 1]);
                }
                else if (stat.Contains(Constants.Halo3Constants.HighestSkill, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.HighestSkill = int.Parse(htmlStats[i + 1]);
                }
                else if (stat.Contains(Constants.Halo3Constants.RankedKdRatio, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.RankedKdRatio     = float.Parse(htmlStats[i + 1]);
                    haloStatModel.TotalRankedKills  = int.Parse(htmlStats[i + 3]);
                    haloStatModel.TotalRankedDeaths = int.Parse(htmlStats[i + 5]);
                    haloStatModel.TotalRankedGames  = int.Parse(htmlStats[i + 7]);
                }
                else if (stat.Contains(Constants.Halo3Constants.SocialKdRatio, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.SocialKdRatio     = float.Parse(htmlStats[i + 1]);
                    haloStatModel.TotalSocialKills  = int.Parse(htmlStats[i + 2]);
                    haloStatModel.TotalSocialDeaths = int.Parse(htmlStats[i + 3]);
                    haloStatModel.TotalSocialGames  = int.Parse(htmlStats[i + 4]);
                }
            }

            return(haloStatModel);
        }