/**
         * SageOfChaos : Total Halo Reach Competitive Games: 906
         */
        public async Task GetHaloReachStatsFromBungie_Goldenflow(string gamerTag)
        {
            // Arrange
            // Do nothing

            // Act
            HaloReachStatModel result = await _sut.GetHaloReachStatsFromBungie(gamerTag);

            // Assert
            Assert.IsTrue(result.TotalGames == 906);
            Assert.IsTrue(result.TotalKills == 12501);
            Assert.IsTrue(result.TotalDeaths == 8656);
            Assert.IsTrue(result.TotalAssists == 1970);
            Assert.IsTrue(result.KillDeathRatio == float.Parse("1.44"));
            Assert.IsTrue(result.KillGameRatio == float.Parse("13.80"));
            Assert.IsTrue(result.DeathGameRatio == float.Parse("9.55"));
            Assert.IsTrue(result.KillHourRatio == float.Parse("99.43"));
            Assert.IsTrue(result.DeathHourRatio == float.Parse("68.85"));
            Assert.IsTrue(result.TotalMedals == 15872);
            Assert.IsTrue(result.MedalGameRatio == float.Parse("17.52"));
            Assert.IsTrue(result.MedalHourRatio == float.Parse("126.24"));
        }
        public async Task <HaloReachStatModel> GetHaloReachStatsFromBungie(string gamerTag)
        {
            HaloReachStatModel haloStatModel = new HaloReachStatModel();

            if (string.IsNullOrWhiteSpace(gamerTag))
            {
                return(await Task.FromResult(haloStatModel));
            }
            else
            {
                WebClient client           = new WebClient();
                string    downloadedString = client.DownloadString(Constants.HaloReachConstants.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, 'careerStatsHome')]"))
                {
                    string value = node.InnerText;
                    cleanedResult.AddRange(GetCleanAndSplitHaloReachStatsFromBungie(value));
                }

                //foreach (string html in cleanedResult)
                //{
                //	Console.WriteLine(html);
                //}

                haloStatModel = ParseHaloReachStatsFromBungie(cleanedResult);

                return(await Task.FromResult(haloStatModel));
            }
        }
        private HaloReachStatModel ParseHaloReachStatsFromBungie(List <string> htmlStats)
        {
            HaloReachStatModel haloStatModel = new HaloReachStatModel();

            for (int i = 0; i < htmlStats.Count; i++)
            {
                string stat = htmlStats[i];
                int    indexOfFirstNumber = stat.IndexOfAny("0123456789".ToCharArray());
                string statName           = stat.Substring(0, (indexOfFirstNumber > 0) ? indexOfFirstNumber : stat.Length);

                if (stat.Contains(Constants.HaloReachConstants.TotalGames, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.TotalGames = int.Parse(htmlStats[i + 1], NumberStyles.AllowThousands);
                }
                else if (statName.Equals(Constants.HaloReachConstants.TotalPlaytime, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.TotalPlaytime = (stat.Replace($"{Constants.HaloReachConstants.TotalPlaytime}", ""));
                }
                else if (statName.Equals(Constants.HaloReachConstants.TotalKills, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.TotalKills = int.Parse(stat.Replace($"{Constants.HaloReachConstants.TotalKills}", ""), NumberStyles.AllowThousands);
                }
                else if (statName.Equals(Constants.HaloReachConstants.TotalDeaths, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.TotalDeaths = int.Parse(stat.Replace($"{Constants.HaloReachConstants.TotalDeaths}", ""), NumberStyles.AllowThousands);
                }
                else if (statName.Equals(Constants.HaloReachConstants.TotalAssists, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.TotalAssists = int.Parse(stat.Replace($"{Constants.HaloReachConstants.TotalAssists}", ""), NumberStyles.AllowThousands);
                }
                else if (statName.Equals(Constants.HaloReachConstants.KillDeathRatio, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.KillDeathRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.KillDeathRatio}", ""));
                }
                else if (statName.Equals(Constants.HaloReachConstants.KillGameRatio, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.KillGameRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.KillGameRatio}", ""));
                }
                else if (statName.Equals(Constants.HaloReachConstants.DeathGameRatio, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.DeathGameRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.DeathGameRatio}", ""));
                }
                else if (statName.Equals(Constants.HaloReachConstants.KillHourRatio, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.KillHourRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.KillHourRatio}", ""));
                }
                else if (statName.Equals(Constants.HaloReachConstants.DeathHourRatio, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.DeathHourRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.DeathHourRatio}", ""));
                }
                else if (statName.Equals(Constants.HaloReachConstants.TotalMedals, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.TotalMedals = int.Parse(stat.Replace($"{Constants.HaloReachConstants.TotalMedals}", ""), NumberStyles.AllowThousands);
                }
                else if (statName.Equals(Constants.HaloReachConstants.MedalGameRatio, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.MedalGameRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.MedalGameRatio}", ""));
                }
                else if (statName.Equals(Constants.HaloReachConstants.MedalHourRatio, StringComparison.OrdinalIgnoreCase))
                {
                    haloStatModel.MedalHourRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.MedalHourRatio}", ""));
                }
            }

            return(haloStatModel);
        }