private object UpdateLuisApplicationAsync(OperationRunner context)
        {
            AzureClient client = new AzureClient(WizardContext.TokenProvider);

            client.SetLogger(context.Logger);

            LuisApplication luisApp = client.GetLuisAppByNameAsync(
                DataModel.InstallationConfiguration.Azure.Luis.AuthoringKey,
                DataModel.InstallationConfiguration.Azure.Luis.AppName,
                DataModel.InstallationConfiguration.Azure.Luis.AuthoringRegion).Result;

            if (luisApp != null)
            {
                LuisGeneralResponse response = client.DeleteLuisAppAsync(
                    DataModel.InstallationConfiguration.Azure.Luis.AuthoringKey,
                    luisApp.Id,
                    DataModel.InstallationConfiguration.Azure.Luis.AuthoringRegion).Result;

                if (response == null)
                {
                    throw new Exception("Failed to delete existing LUIS application.");
                }
            }

            string luisAppId = client.ImportLuisAppAsync(
                DataModel.InstallationConfiguration.Azure.Luis.AuthoringKey,
                DataModel.InstallationConfiguration.Azure.Luis.AppName,
                DataModel.InstallationConfiguration.Azure.Luis.AppFilePath,
                DataModel.InstallationConfiguration.Azure.Luis.AuthoringRegion).Result;

            if (string.IsNullOrWhiteSpace(luisAppId))
            {
                throw new Exception("Failed to import LUIS application.");
            }

            DataModel.InstallationConfiguration.Azure.Luis.ApplicationId = luisAppId;

            LuisGeneralResponse associatedApp = client.AssociateAzureResourceWithLuisAppAsync(
                luisAppId,
                DataModel.InstallationConfiguration.Azure.Luis.AuthoringRegion,
                DataModel.InstallationConfiguration.Azure.Luis.AuthoringKey,
                new LuisAssociatedAzureResourceRequest()
            {
                AzureSubscriptionId = DataModel.InstallationConfiguration.Azure.SelectedSubscription.Id,
                ResourceGroup       = DataModel.InstallationConfiguration.Azure.ResourceGroupName,
                AccountName         = DataModel.InstallationConfiguration.Azure.Luis.ResourceName,
            }).Result;

            if (associatedApp == null ||
                string.Compare(associatedApp.Code, "Success", true) != 0)
            {
                throw new Exception("Failed to associated LUIS application with Azure LUIS Cognitive Services resource!");
            }

            LuisModelTrainingStatus[] trainedApp = client.TrainLuisApp(
                DataModel.InstallationConfiguration.Azure.Luis.ApplicationId,
                DataModel.InstallationConfiguration.Azure.Luis.AppVersion,
                DataModel.InstallationConfiguration.Azure.Luis.AuthoringRegion,
                DataModel.InstallationConfiguration.Azure.Luis.AuthoringKey);

            if (trainedApp
                .Where(x => x.Details.StatusId != 0 &&
                       x.Details.StatusId != 2).Count() > 0)
            {
                throw new Exception("Failed to train LUIS application!");
            }

            LuisPublishResponse publishedApp = client.PublishLuisAppAsync(
                DataModel.InstallationConfiguration.Azure.Luis.ApplicationId,
                DataModel.InstallationConfiguration.Azure.Luis.AppVersion,
                DataModel.InstallationConfiguration.Azure.Luis.AuthoringRegion,
                DataModel.InstallationConfiguration.Azure.Luis.AuthoringKey).Result;

            if (publishedApp == null)
            {
                throw new Exception("Failed to publish LUIS application!");
            }

            DataModel.InstallationConfiguration.Azure.Luis.EndpointUri = publishedApp.EndpointUrl.Replace(DataModel.InstallationConfiguration.Azure.Luis.AuthoringRegion, DataModel.InstallationConfiguration.Azure.Luis.ResourceRegion);

            // Update settings
            AppServiceAppSettings appSettings = client.GetAppServiceAppSettingsAsync(
                DataModel.InstallationConfiguration.Azure.SelectedSubscription.Id,
                DataModel.InstallationConfiguration.Azure.ResourceGroupName,
                DataModel.InstallationConfiguration.Azure.FunctionApp.AppName).Result;

            if (appSettings == null)
            {
                throw new Exception("Failed to get app settings for app service!");
            }

            appSettings.Properties["luisEndpoint"] = DataModel.InstallationConfiguration.Azure.Luis.EndpointUri;

            AppServiceAppSettings updatedAppSettings = client.UpdateAppServiceAppSettingsAsync(
                DataModel.InstallationConfiguration.Azure.SelectedSubscription.Id,
                DataModel.InstallationConfiguration.Azure.ResourceGroupName,
                DataModel.InstallationConfiguration.Azure.FunctionApp.AppName,
                appSettings).Result;

            if (appSettings == null)
            {
                throw new Exception("Failed to update app settings for app service!");
            }

            return(true);
        }