protected List<CurrentTimeDto> TransformResults(CurrentTimeResult remoteHostCurrentTimes, CurrentWeatherDto weatherResult)
        {
            var results = new List<CurrentTimeDto>();
            var dateTimeRawUtc = remoteHostCurrentTimes.DateTimeResult.DateTimeRawUtc;
            var time = remoteHostCurrentTimes.DateTimeResult.Time;

            foreach (var currentTime in remoteHostCurrentTimes.CurrentTimes)
            {
                var currentTimeDto = new CurrentTimeDto
                {
                    RideName = currentTime.Name,
                    IsOpened = currentTime.WaitTime.IsOpened(),
                    WaitTime = currentTime.WaitTime.TimeInMinutes(),
                    FastPassTime = currentTime.FastPass,
                    DateTime = new DateTimeDto(dateTimeRawUtc, time),
                    Weather = weatherResult,
                    ParkId = remoteHostCurrentTimes.ParkId,
                    ParkName = remoteHostCurrentTimes.ParkName

                };

                results.Add(currentTimeDto);
            }

            return results;
        }
        private bool IsWeatherStale(CurrentWeatherDto currentWeatherDto)
        {
            if( currentWeatherDto == null) { return true; }

            var utcNow = DateTime.UtcNow;
            var lastCheckTime = currentWeatherDto.ObservationTime;

            var timeSpan = utcNow.Subtract(lastCheckTime);

            return (timeSpan.TotalMinutes > WeatherIntervalLimit);
        }
        public async Task<GatherResults> Gather(CurrentWeatherDto weatherResult)
        {
            if (!CanGatherData(this.LocationZipCode)) { return new GatherResults {ZipCode = LocationZipCode, Source = _serviceAdapter.Source}; }

            // fetch new current time from remote host
            var remoteHostCurrentTimes = await FetchCurrentTimes();

            var currentTimeDtos = TransformResults(remoteHostCurrentTimes, weatherResult);
            
            return new GatherResults
            {
                Source = _serviceAdapter.Source,
                ZipCode = this.LocationZipCode,
                CurrentTimes = currentTimeDtos
            };
        }
        public async Task Save(CurrentWeatherDto currentWeatherDto)
        {
            currentWeatherDto.ObservationTime = DateTime.UtcNow;

            var zipCode = currentWeatherDto.Zip;
            var fullEndpoint = $"http://localhost:8080/databases/CurrentWeather/docs/{zipCode}";
            var requestUri = new Uri(fullEndpoint);
            
            using (var httpClient = new HttpClient())
            {
                httpClient.BaseAddress = requestUri;

                var asJson = JsonConvert.SerializeObject(currentWeatherDto);
                var contentPost = new StringContent(asJson, Encoding.UTF8, "application/json");

                await httpClient.PutAsync(requestUri, contentPost);
            }
            
        }