public void ProcessData()
        {
            Status = "Processing data...";
            ProcessedStateData.Clear();
            ProcessedCountryData.Clear();

            List<Metrics> metrics = new List<Metrics>();
            if (IncludeDeaths) metrics.Add(Metrics.Deaths);
            if (IncludeCases) metrics.Add(Metrics.Cases);
            if (IncludeTests) metrics.Add(Metrics.Tests);
            if (IncludePercentPositive) metrics.Add(Metrics.PercentPositive);
            if (IncludeCurrentHospitalizations) metrics.Add(Metrics.HospitalCurrent);
            if (IncludeNewHospitalizations) metrics.Add(Metrics.HospitalNew);

            if (UseCovidDataSource)
            {
                foreach (State s in StateData)
                {
                    var processedState = new ProcessedState(s);
                    if (UseDailyData)
                    {
                        var parseSuccess = Int32.TryParse(RollingAverageNumber, out int rollingAvg);
                        if (rollingAvg == 0) rollingAvg = 7;
                        processedState.ProcessDailyData(metrics, ProcessRollingAverage, rollingAvg, ProcessPerCapita);
                    }
                    else if (UseCumeData)
                    {
                        processedState.ProcessCumulativeData(metrics, ProcessPerCapita);
                    }

                    ProcessedStateData.Add(processedState);
                }
            }
            else if (UseOwidSource)
            {
                foreach (OwidCountry c in CountryData)
                {
                    var processedCountry = new ProcessedCountry(c);
                    if (UseDailyData)
                    {
                        int rollingAvg = 7;
                        var parseSuccess = Int32.TryParse(RollingAverageNumber, out rollingAvg);
                        if (rollingAvg == 0) rollingAvg = 7;
                        processedCountry.ProcessDailyData(metrics, ProcessRollingAverage, rollingAvg, ProcessPerCapita);
                    }
                    else if (UseCumeData)
                    {
                        processedCountry.ProcessCumulativeData(metrics, ProcessPerCapita);
                    }

                    ProcessedCountryData.Add(processedCountry);
                }
            }

            isDataProcessed = true;

            Status = "Data Processed!";
        }
        public async void ExportData()
        {
            Status = "Exporting Data...";

            var folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync("ExportFolder");

            //  https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-using-file-and-folder-pickers

            DateTime startDate = new DateTime(2020, 3, 1);
            Dictionary<string, List<CalculatedValue>> listOfFiles = null;
            if (UseCovidDataSource)
                listOfFiles = ProcessedStateData?.FirstOrDefault()?.OutputFiles;
            else if (UseOwidSource)
            {
                listOfFiles = ProcessedCountryData?.FirstOrDefault()?.OutputFiles;
                startDate = new DateTime(2020, 1, 1);
            }

            if (folder == null || listOfFiles == null) return;

            foreach (KeyValuePair<string, List<CalculatedValue>> kvp in listOfFiles)
            {
                DateTime currentDate = startDate;

                DateTime latestDate = listOfFiles.Values.FirstOrDefault().Max(cv => cv.Date);

                StorageFile csvFile = await folder?.CreateFileAsync(kvp.Key + ".csv", Windows.Storage.CreationCollisionOption.ReplaceExisting);

                using (CsvFileWriter dataWriter = new CsvFileWriter(await csvFile.OpenStreamForWriteAsync()))
                {
                    CsvRow headerRow = new CsvRow();
                    headerRow.Add("Date");
                    if (UseCovidDataSource)
                    {
                        foreach (ProcessedState ps in ProcessedStateData)
                            headerRow.Add(ps.CoreStateData.StateBase.Code.ToString());
                    }
                    else if (UseOwidSource)
                    {
                        foreach (ProcessedCountry pc in ProcessedCountryData)
                            headerRow.Add(pc.CoreCountryData.CountryName);
                    }
                    dataWriter.WriteRow(headerRow);

                    while (currentDate.Date <= latestDate)
                    {
                        CsvRow nextRow = new CsvRow();
                        nextRow.Add(currentDate.Date.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture));
                        if (UseCovidDataSource)
                        {
                            foreach (ProcessedState ps in ProcessedStateData)
                            {
                                var calcVals = ps.OutputFiles[kvp.Key].FirstOrDefault(calcv => calcv.Date.Date == currentDate.Date);
                                if (calcVals == null)
                                    nextRow.Add("0");
                                else
                                    nextRow.Add(calcVals.Value.ToString("F3", CultureInfo.InvariantCulture));
                            }
                        }
                        else if (UseOwidSource)
                        {
                            foreach (ProcessedCountry pc in ProcessedCountryData)
                            {
                                var calcVals = pc.OutputFiles[kvp.Key].FirstOrDefault(calcv => calcv.Date.Date == currentDate.Date);
                                if (calcVals == null)
                                    nextRow.Add("0");
                                else
                                    nextRow.Add(calcVals.Value.ToString("F3", CultureInfo.InvariantCulture));
                            }
                        }
                        dataWriter.WriteRow(nextRow);
                        currentDate = currentDate + new TimeSpan(1, 0, 0, 0);
                    }
                }
            }

            Status = "Data Exported!";

        }