/// <summary>
 /// Builds a Confidential Client Application for authorizing an App Registration with API.
 /// </summary>
 /// <param name="appRegistrationConfig"></param>
 /// <returns></returns>
 private static IConfidentialClientApplication BuildClientApplication(AppRegistrationConfig appRegistrationConfig)
 {
     return(ConfidentialClientApplicationBuilder.Create(appRegistrationConfig.ClientId)
            .WithClientSecret(appRegistrationConfig.ClientSecret)
            .WithAuthority(new Uri(appRegistrationConfig.Authority))
            .Build());
 }
        /// <summary>
        /// Loads the <see cref="AppRegistrationConfig"/> and <see cref="ApiRegistrationConfig"/> configs.
        /// </summary>
        /// <param name="appRegistrationConfig">Config for Azure App Registraiton</param>
        /// <param name="apiRegistrationConfig">Config for the API Subscription Key from Customer Insights.</param>
        private static void LoadConfigs(AppRegistrationConfig appRegistrationConfig, ApiRegistrationConfig apiRegistrationConfig)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json");

            IConfigurationRoot configuration = builder.Build();

            configuration.GetSection("AppRegistration").Bind(appRegistrationConfig);
            configuration.GetSection("ApiRegistration").Bind(apiRegistrationConfig);
        }
        /// <summary>
        /// Entry point for the program - creates and loads configs, builds app from app registration for auth, creates Customer Insights API client, and starts interactions.
        /// </summary>
        /// <returns>A task for the async main function.</returns>
        public static async Task Main()
        {
            AppRegistrationConfig appRegistrationConfig = new AppRegistrationConfig();
            ApiRegistrationConfig apiRegistrationConfig = new ApiRegistrationConfig();

            LoadConfigs(appRegistrationConfig, apiRegistrationConfig);

            IConfidentialClientApplication app = BuildClientApplication(appRegistrationConfig);

            CustomerInsights customerInsightsApi = await CreateCustomerInsightsApi(apiRegistrationConfig, app);

            var sampleInteractions = new SampleApiInteractions(customerInsightsApi);
            await sampleInteractions.StartAsync();
        }