private static AuthenticationContext CreateAdalContext()
        {
            AdalFileCache         tokenCache            = new AdalFileCache(AdalCacheFile);
            AuthenticationContext authenticationContext = new AuthenticationContext(Settings.Authority, tokenCache);

            return(authenticationContext);
        }
        static async Task Main(string[] args)
        {
            while (true)
            {
                Console.Clear();

                Console.WriteLine(@"
                        -------------------------------------------------
                        1. [ADAL] Get Users
                        2. [ADAL] Acquire Token Silent with first user 
                        3. [ADAL] Acquire Token Interactive
                        4. [ADAL] Clear Cache
                        -------------------------------------------------
                        5. [MSAL] Get Accounts 
                        6. [MSAL] Acquire Token Silent with first account
                        7. [MSAL] Acquire Token Interactive
                        8. [MSAL] Clear Cache
                        -------------------------------------------------
                        x. Exit app
                        
                    Enter your Selection: ");;

                char.TryParse(Console.ReadLine(), out var selection);

                try
                {
                    switch (selection)
                    {
                    case '1':      // [ADAL] Get Users
                        var authContext = CreateAdalContext();

                        foreach (var adalCacheItem in authContext.TokenCache.ReadItems())
                        {
                            Console.WriteLine("Cache entry for " + adalCacheItem.DisplayableId);
                        }

                        Console.WriteLine("Done getting ADAL users");
                        break;

                    case '2':     // [ADAL] Acquire Token Silent with first ADAL user
                        authContext = CreateAdalContext();

                        var cacheItem = authContext.TokenCache.ReadItems().FirstOrDefault();
                        if (cacheItem == null)
                        {
                            Console.ForegroundColor = ConsoleColor.Yellow;
                            Console.WriteLine("No ADAL users in the cache");
                            Console.ResetColor();
                            break;
                        }

                        var result = await
                                     authContext.AcquireTokenSilentAsync(
                            Settings.AdalResource,
                            Settings.ClientId,
                            new UserIdentifier(cacheItem?.DisplayableId, UserIdentifierType.OptionalDisplayableId));

                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Got a token for: " + result.UserInfo.DisplayableId);
                        Console.ResetColor();
                        break;

                    case '3':     // acquire token
                        authContext = CreateAdalContext();
                        result      = await
                                      authContext.AcquireTokenAsync(
                            Settings.AdalResource,
                            Settings.ClientId,
                            Settings.RedirectUri,
                            new PlatformParameters(PromptBehavior.SelectAccount));

                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Got a token for: " + result.UserInfo.DisplayableId);
                        Console.ResetColor();
                        break;

                    case '4':      // [ADAL] Clear cache
                        AdalFileCache tokenCache = new AdalFileCache(AdalCacheFile);
                        tokenCache.Clear();

                        break;

                    case '5':     // [MSAL] Get Accounts
                        var pca      = CreateMsalApp();
                        var accounts = await pca.GetAccountsAsync();

                        foreach (var account in accounts)
                        {
                            Console.WriteLine("Cache entry for " + account.Username);
                        }

                        Console.WriteLine("Done getting MSAL accounts");


                        break;

                    case '6':     // [MSAL] Acquire Token Silent with first account
                        pca = CreateMsalApp();
                        var firstAccount = (await pca.GetAccountsAsync()).FirstOrDefault();

                        var msalResult = await pca.AcquireTokenSilent(Settings.MsalScope, firstAccount).ExecuteAsync();

                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Got a token for: " + msalResult.Account.Username);
                        Console.ResetColor();

                        break;

                    case '7':     // [MSAL] Acquire Token Interactive
                        pca        = CreateMsalApp();
                        msalResult = await pca.AcquireTokenInteractive(Settings.MsalScope).ExecuteAsync();

                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Got a token for: " + msalResult.Account.Username);
                        Console.ResetColor();

                        break;

                    case '8':     // [MSAL] Clear Cache
                        pca      = CreateMsalApp();
                        accounts = await pca.GetAccountsAsync();

                        foreach (var account in accounts)
                        {
                            await pca.RemoveAsync(account);
                        }
                        break;
                    }
                }
                catch (Exception e)
                {
                    if (e is AdalSilentTokenAcquisitionException)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("Cannot get ADAL token silently .. " + e.Message);
                        Console.ResetColor();
                    }

                    if (e is MsalUiRequiredException)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("Cannot get MSAL token silently .. " + e.Message);
                        Console.ResetColor();
                    }

                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine(e);
                    Console.ResetColor();
                }

                Console.WriteLine("\n\nHit 'ENTER' to continue...");
                Console.ReadLine();
            }
        }