//private WeatherText ProcessWeatherText(WeatherData data)
        //{
        //    var values = data.Data.Parameters.First().Weathers;
        //    var timeLayout = data.Data.TimeLayouts.FirstOrDefault(x => x.Key.Equals(values[0].TimeLayoutKey));
        //    var list = new List<WeatherData<string>>();
        //    if (values != null && timeLayout != null)
        //    {
        //            for (var index = 0; index < values.Length; index++)
        //            {
        //                var sb = new StringBuilder();
        //                foreach (var condition in values[0].WeatherConditions)
        //                {
        //                    //condition.Values[0].Coverage.ToInitialCap();
        //                }
        //                var startTime = timeLayout.StartTimes[index];
        //                var endTime = new DateTime?();
        //                if (timeLayout.EndTimes != null)
        //                {
        //                    endTime = timeLayout.EndTimes[index];
        //                }
        //                list.Add(new WeatherData<int>
        //                {
        //                    Value = (int)data.Values[index],
        //                    Start = startTime,
        //                    End = endTime
        //                });
        //            }
        //    }
        //    return list;
        //}
        private WeatherDataHumidity ProcessHumidities(WeatherData data)
        {
            var relHumidities = data.Data.Parameters.First().Humidities.FirstOrDefault(x => x.Type.Equals("relative"));

            var humidityData = new WeatherDataHumidity();
            humidityData.Relative = ProcessValues(relHumidities, data.Data.TimeLayouts);
            return humidityData;
        }
        public WeatherRequestResult Build(WeatherData data)
        {
            var source = data.Head.Source;
            var result = new WeatherRequestResult
            {
                CreditUrl = source.Credit,
                CreditLogUrl = source.CreditLogo,
                CreatedOnUtc = data.Head.Product.CreationDate,
                Temperatures = ProcessTemperatures(data),
                Precipitation = ProcessPrecipitations(data),
                Humidity = ProcessHumidities(data),
                PrecipitationProbability = ProcessPrecipProbabilities(data),
                Wind = ProcessWind(data),
                CloudCover = ProcessCloudCover(data)
            };

            //  result.Weather = ProcessWeatherText(data);

             //   result.Weather = ProcessWeathers(data);

            return result;
        }
        private WeatherDataPrecipitation ProcessPrecipitations(WeatherData data)
        {
            var values = data.Data.Parameters.First().Precipitations;
            var snow = values.FirstOrDefault(t => t.Type.Equals("snow"));
            var ice = values.FirstOrDefault(t => t.Type.Equals("ice"));
            var liquid = values.FirstOrDefault(t => t.Type.Equals("liquid"));

            var precipData = new WeatherDataPrecipitation();
            precipData.Snow = ProcessValues(snow, data.Data.TimeLayouts);
            precipData.Ice = ProcessValues(ice, data.Data.TimeLayouts);
            precipData.Liquid = ProcessValues(liquid, data.Data.TimeLayouts);

            return precipData;
        }
 private WeatherDataCloudCover ProcessCloudCover(WeatherData data)
 {
     var parameters = data.Data.Parameters.First();
     var coverage = parameters.CloudAmounts.FirstOrDefault();
     return new WeatherDataCloudCover {Percent = ProcessValues(coverage, data.Data.TimeLayouts)};
 }
        private WeatherDataWind ProcessWind(WeatherData data)
        {
            var parameters = data.Data.Parameters.First();
            var speeds = parameters.WindSpeeds;
            var directions = parameters.WindDirections.FirstOrDefault();
            var gusts = speeds.FirstOrDefault(x => x.Type.Equals("gust"));
            var sustained = speeds.FirstOrDefault(x => x.Type.Equals("sustained"));

            var windData = new WeatherDataWind();
            windData.Direction = ProcessValues(directions, data.Data.TimeLayouts);
            windData.Gusts = ProcessValues(gusts, data.Data.TimeLayouts);
            windData.Speed = ProcessValues(sustained, data.Data.TimeLayouts);

            return windData;
        }
        private WeatherDataTemperature ProcessTemperatures(WeatherData data)
        {
            var values = data.Data.Parameters.First().Temperatures;
            var apparentTemps = values.FirstOrDefault(t => t.Type.Equals("apparent"));
            var maxTemps = values.FirstOrDefault(t => t.Type.Equals("maximum"));
            var minTemps = values.FirstOrDefault(t => t.Type.Equals("minimum"));
            var hourly = values.FirstOrDefault(t => t.Type.Equals("hourly"));
            var dewPoint = values.FirstOrDefault(t => t.Type.Equals("dew point"));

            var tempData = new WeatherDataTemperature
            {
                DailyMaximum = ProcessValues(maxTemps, data.Data.TimeLayouts),
                DailyMinimum = ProcessValues(minTemps, data.Data.TimeLayouts),
                Apparent = ProcessValues(apparentTemps, data.Data.TimeLayouts),
                DewPoint = ProcessValues(dewPoint, data.Data.TimeLayouts),
                Hourly = ProcessValues(hourly, data.Data.TimeLayouts)
            };

            return tempData;
        }
 private WeatherDataPrecipitationProbability ProcessPrecipProbabilities(WeatherData data)
 {
     var values = data.Data.Parameters.First().ProbabilityOfPrecipitations;
     var container = new WeatherDataPrecipitationProbability();
     container.Percents = ProcessValues(values.FirstOrDefault(t => t.Type.Equals("12 hour")),
         data.Data.TimeLayouts);
     return container;
 }