private static void DisplaySettings(JsonSettings mySettingsConfig)
 {
     Console.WriteLine("Database Connection string: " + mySettingsConfig.DatabaseConnectionString);
     Console.WriteLine("Marketo Instance: " + mySettingsConfig.Marketo.InstanceUrl);
     Console.WriteLine("Marketo ClientId: " + mySettingsConfig.Marketo.ClientId);
     Console.WriteLine("Marketo Secret: " + mySettingsConfig.Marketo.Secret);
 }
        private static async Task InitiatePurge(JsonSettings mySettingsConfig)
        {
            IDatabaseRepository    databaseRepository    = new DatabaseRepository(mySettingsConfig.DatabaseConnectionString);
            IMarketoGateway        marketoGateway        = new MarketoGateway(mySettingsConfig.Marketo.InstanceUrl, mySettingsConfig.Marketo.ClientId, mySettingsConfig.Marketo.Secret);
            IMarketoPurgingService marketoPurgingService = new MarketoPurgingService(databaseRepository, marketoGateway);

            bool marketoTestResult = false;

            Console.WriteLine("Ready to test Marketo connection? Y/N");
            string marketoTestQuestionAnswer = Console.ReadLine();

            if (marketoTestQuestionAnswer.Equals("Y", StringComparison.InvariantCultureIgnoreCase) || marketoTestQuestionAnswer.Equals("Yes", StringComparison.InvariantCultureIgnoreCase))
            {
                marketoTestResult = marketoPurgingService.TestMarketoConnection();

                Console.WriteLine(
                    marketoTestResult
                        ? "Marketo Connection successful and token has been retrieved"
                        : "Marketo Connection failed. Please fix configuration and try again.");
            }
            if (marketoTestResult)
            {
                bool databaseTestResult = false;

                Console.WriteLine("Ready to test SQL Database connection? Y/N");
                string sqlDatabaseTestQuestionAnswer = Console.ReadLine();
                if (sqlDatabaseTestQuestionAnswer.Equals("Y", StringComparison.InvariantCultureIgnoreCase) || sqlDatabaseTestQuestionAnswer.Equals("Yes", StringComparison.InvariantCultureIgnoreCase))
                {
                    DatabaseTestDto dbTestResult = await marketoPurgingService.TestDatabaseConnection();

                    databaseTestResult = dbTestResult.Success;
                    Console.WriteLine(
                        dbTestResult.Success
                            ? "Database Connection successful, " + dbTestResult.RecordsRetrieved + " records retrieved."
                            : "Database Connection failed with error " + dbTestResult.Error + ". Please fix configuration and try again.");
                }

                if (databaseTestResult)
                {
                    Console.WriteLine(
                        "Would you like to proceed to delete all Opportunities and OpportunityRoles? Y/N");
                    string purgeQuestionAnswer = Console.ReadLine();
                    if (purgeQuestionAnswer.Equals("Y", StringComparison.InvariantCultureIgnoreCase) || purgeQuestionAnswer.Equals("Yes", StringComparison.InvariantCultureIgnoreCase))
                    {
                        await marketoPurgingService.Purge();

                        Console.WriteLine("Purge has been completed.");
                    }
                }
            }
        }
        static async Task Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                          .AddEnvironmentVariables();

            IConfigurationRoot configuration    = builder.Build();
            JsonSettings       mySettingsConfig = new JsonSettings();

            configuration.Bind(mySettingsConfig);

            DisplaySettings(mySettingsConfig);

            await InitiatePurge(mySettingsConfig);

            Console.ReadKey();
        }