private void createOverview(WeatherDataCollection daysForReport, StringBuilder report)
        {
            var dates = new List <string>();

            foreach (var current in daysForReport.GetDaysWithHighestLowTempByYear())
            {
                dates.Add(current.Date.ToShortDateString());
            }

            var daysWithHighestLow = string.Join(", ", dates);

            report.Append(
                $"Highest temp occurred on {this.formatDaysWithHighestTempForYear(daysForReport)}: {daysForReport.GetDaysWithHighestTempForAYear()[0].High}" +
                Environment.NewLine);
            report.Append(
                $"Lowest temp occurred on {this.formatDaysWithLowestTempForYear(daysForReport)}: {daysForReport.GetDaysWithLowestTempByYear()[0].Low}" +
                Environment.NewLine);
            report.Append(
                $"Lowest high temp occurred on {this.formatDaysWithLowestHighTempForYear(daysForReport)}: {daysForReport.GetDaysWithLowestHighTempByYear()[0].High}" +
                Environment.NewLine);
            report.Append(
                $"Highest low temp occurred on {daysWithHighestLow}: {daysForReport.GetDaysWithHighestLowTempByYear()[0].Low}" +
                Environment.NewLine);
            report.Append($"The average high: {daysForReport.GetAverageHighTempForYear():F}" +
                          Environment.NewLine);
            report.Append($"The average low: {daysForReport.GetAverageLowTempForYear():F}" +
                          Environment.NewLine);
            report.Append(
                $"Number of days with temp {this.upperBound} or greater: {daysForReport.GetDaysWithTempGreaterThanEqualTo(this.upperBound)}" +
                Environment.NewLine);
            report.Append(
                $"Number of days with temp {this.lowerBound} or less: {daysForReport.GetDaysWithTempLessThanEqualTo(this.lowerBound)}" +
                Environment.NewLine);
        }
        private void createYearlyBreakdown(WeatherDataCollection daysForReport, StringBuilder report)
        {
            var years = daysForReport.GroupByYear();

            foreach (var year in years)
            {
                var tempWeatherCollection = new WeatherDataCollection();
                foreach (var day in year)
                {
                    tempWeatherCollection.Add(day);
                }

                this.createOverview(tempWeatherCollection, report);
                report.Append(Environment.NewLine);

                var upperBound = tempWeatherCollection.GetDaysWithHighestTempForAYear()[0].High;
                var lowerBound = tempWeatherCollection.GetDaysWithLowestHighTempByYear()[0].High;


                report.Append("Highest Temp Histogram" + Environment.NewLine);
                this.createHistogram(report, tempWeatherCollection, lowerBound, upperBound, this.bucketSize, HighLow.High);
                report.Append(Environment.NewLine);


                upperBound = tempWeatherCollection.GetDaysWithHighestLowTempByYear()[0].Low;
                lowerBound = tempWeatherCollection.GetDaysWithLowestTempByYear()[0].Low;


                report.Append("Lowest Temp Histogram" + Environment.NewLine);
                this.createHistogram(report, tempWeatherCollection, lowerBound, upperBound, this.bucketSize, HighLow.Low);
                report.Append(Environment.NewLine);


                this.createMonthlyBreakdown(tempWeatherCollection, report);
            }
        }