// === Methods used only in EN API v2 ===

        public Task <DailySummaryConfiguration> GetDailySummaryConfigurationAsync()
        {
            Debug.WriteLine("Fetching DailySummaryConfiguration");

            return(Task.Run(async() =>
            {
                DailySummaryConfiguration dsc = await _exposureNotificationWebService.GetDailySummaryConfiguration();
                if (dsc == null)
                {
                    throw new FailedToFetchConfigurationException(
                        "Aborting pull because configuration was not fetched from server. See corresponding server error log");
                }

                // On iOS double-type weights represent percents, so we need to multiply by 100
                if (DeviceInfo.Platform == DevicePlatform.iOS)
                {
                    dsc.AttenuationWeights[DistanceEstimate.Immediate] *= 100;
                    dsc.AttenuationWeights[DistanceEstimate.Medium] *= 100;
                    dsc.AttenuationWeights[DistanceEstimate.Near] *= 100;
                    dsc.AttenuationWeights[DistanceEstimate.Other] *= 100;
                    dsc.InfectiousnessWeights[Infectiousness.Standard] *= 100;
                    dsc.InfectiousnessWeights[Infectiousness.High] *= 100;
                    dsc.ReportTypeWeights[ReportType.Recursive] *= 100;
                    dsc.ReportTypeWeights[ReportType.ConfirmedTest] *= 100;
                    dsc.ReportTypeWeights[ReportType.SelfReported] *= 100;
                    dsc.ReportTypeWeights[ReportType.ConfirmedClinicalDiagnosis] *= 100;
                }

                string jsonConfiguration = JsonConvert.SerializeObject(dsc);
                ServiceLocator.Current.GetInstance <IDeveloperToolsService>().LastUsedConfiguration =
                    $"V2 config. Time used (UTC): {DateTime.UtcNow.ToGreGorianUtcString("yyyy-MM-dd HH:mm:ss")}\n{jsonConfiguration}";
                return dsc;
            }));
        }
        // Consider: Displaying the exposure configuration in the activities.
        public async Task <string> FetchExposureConfigurationAsync()
        {
            try
            {
                DailySummaryConfiguration dsc = await new ExposureNotificationHandler().GetDailySummaryConfigurationAsync();
                string result = $"AttenuationThresholds: {ENConfArrayString(dsc.AttenuationThresholds)}\n " +
                                $"AttenuationWeights: {ENConfDictionaryString(dsc.AttenuationWeights)} \n" +
                                $"DaysSinceLastExposureThreshold: {dsc.DaysSinceLastExposureThreshold} \n" +
                                $"DaysSinceOnsetInfectiousness: {ENConfDictionaryString(dsc.DaysSinceOnsetInfectiousness)} \n" +
                                $"DefaultInfectiousness: {dsc.DefaultInfectiousness}\n" +
                                $"DefaultReportType: {dsc.DefaultReportType}\n" +
                                $"InfectiousnessWeights: {ENConfDictionaryString(dsc.InfectiousnessWeights)}\n" +
                                $"ReportTypeWeights: {ENConfDictionaryString(dsc.ReportTypeWeights)}\n";
                DevToolsOutput = result;
            }
            catch (InvalidOperationException)
            {
                EN.Configuration c      = await new ExposureNotificationHandler().GetConfigurationAsync();
                string           result = $" AttenuationWeight: {c.AttenuationWeight}, Values: {ENConfArrayString(c.AttenuationScores)} \n" +
                                          $" DaysSinceLastExposureWeight: {c.DaysSinceLastExposureWeight}, Values: {ENConfArrayString(c.DaysSinceLastExposureScores)} \n" +
                                          $" DurationWeight: {c.DurationWeight}, Values: {ENConfArrayString(c.DurationScores)} \n" +
                                          $" TransmissionWeight: {c.TransmissionWeight}, Values: {ENConfArrayString(c.TransmissionRiskScores)} \n" +
                                          $" MinimumRiskScore: {c.MinimumRiskScore}" +
                                          $" DurationAtAttenuationThresholds: [{c.DurationAtAttenuationThresholds[0]},{c.DurationAtAttenuationThresholds[1]}]";
                Debug.WriteLine("Exposure Configuration:");
                Debug.WriteLine($" AttenuationWeight: {c.AttenuationWeight}, Values: {ENConfArrayString(c.AttenuationScores)}");
                Debug.WriteLine($" DaysSinceLastExposureWeight: {c.DaysSinceLastExposureWeight}, Values: {ENConfArrayString(c.DaysSinceLastExposureScores)}");
                Debug.WriteLine($" DurationWeight: {c.DurationWeight}, Values: {ENConfArrayString(c.DurationScores)}");
                Debug.WriteLine($" TransmissionWeight: {c.TransmissionWeight}, Values: {ENConfArrayString(c.TransmissionRiskScores)}");
                Debug.WriteLine($" MinimumRiskScore: {c.MinimumRiskScore}");
                DevToolsOutput = result;
            }

            DevToolUpdateOutput?.Invoke();
            await _clipboard.SetTextAsync(DevToolsOutput);

            return(DevToolsOutput);
        }