public async Task PurchaseAndReleaseAsync()
        {
            if (!IncludePhoneNumberLiveTests)
            {
                Assert.Ignore("Include phone number live tests flag is off.");
            }

            const string locale           = "en-US";
            var          connectionString = TestEnvironment.ConnectionString;
            var          client           = CreateClient(false);

            const string countryCode = "US";

            #region Snippet:GetPhonePlanGroupsAsync
            var phonePlanGroups = client.GetPhonePlanGroupsAsync(countryCode, locale);

            await foreach (var phonePlanGroup in phonePlanGroups)
            {
                Console.WriteLine($"Plan group: {phonePlanGroup.LocalizedName}, type: {phonePlanGroup.PhoneNumberType}");
            }
            #endregion Snippet:GetPhonePlanGroupsAsync

            var phonePlanGroupsList = await phonePlanGroups.ToEnumerableAsync();

            string phonePlanGroupId = phonePlanGroupsList.First(group => group.PhoneNumberType == PhoneNumberType.TollFree).PhonePlanGroupId;

            #region Snippet:GetPhonePlansAsync
            var phonePlans = client.GetPhonePlansAsync(countryCode, phonePlanGroupId, locale);
            await foreach (var phonePlan in phonePlans)
            {
                Console.WriteLine($"Plan: {phonePlan.LocalizedName}, {phonePlan.LocationType}");
            }
            #endregion Snippet:GetPhonePlansAsync

            var firstphonePlan = (await phonePlans.ToEnumerableAsync()).First();
            var areaCode       = firstphonePlan.AreaCodes.First();
            var phonePlanId    = firstphonePlan.PhonePlanId;

            #region Snippet:ReservePhoneNumbersAsync
            var reservationName        = "My reservation";
            var reservationDescription = "reservation description";
            var reservationOptions     = new CreateReservationOptions(reservationName, reservationDescription, new[] { phonePlanId }, areaCode);
            reservationOptions.Quantity = 1;

            var reserveOperation = await client.StartReservationAsync(reservationOptions);

            //@@ await reserveOperation.WaitForCompletionAsync();
            /*@@*/ await WaitForCompletionAsync(reserveOperation);

            #endregion Snippet:ReservePhoneNumbersAsync

            reserveOperation = new PhoneNumberReservationOperation(client, reserveOperation.Id);

            #region Snippet:PersistReservePhoneNumbersOperationAsync
            var reservationId = reserveOperation.Id;

            // persist reservationId and then continue with a new operation

            //@@var reserveOperation = new PhoneNumberReservationOperation(client, reservationId);
            //@@ await reserveOperation.WaitForCompletionAsync();
            /*@@*/ await WaitForCompletionAsync(reserveOperation);

            #endregion Snippet:PersistReservePhoneNumbersOperationAsync

            #region Snippet:StartPurchaseReservationAsync
            var purchaseOperation = await client.StartPurchaseReservationAsync(reservationId);

            //@@ await purchaseOperation.WaitForCompletionAsync();
            /*@@*/ await WaitForCompletionAsync(purchaseOperation);

            #endregion Snippet:StartPurchaseReservationAsync

            #region Snippet:ListAcquiredPhoneNumbersAsync
            var acquiredPhoneNumbers = client.GetAllPhoneNumbersAsync(locale);

            await foreach (var phoneNumber in acquiredPhoneNumbers)
            {
                Console.WriteLine($"Phone number: {phoneNumber.PhoneNumber}, activation state: {phoneNumber.ActivationState}");
            }
            #endregion Snippet:ListAcquiredPhoneNumbersAsync

            var acquiredPhoneNumber = reserveOperation.Value.PhoneNumbers.Single();
            acquiredPhoneNumbers = client.GetAllPhoneNumbersAsync(locale);
            var beforeReleaseNumberCount = (await acquiredPhoneNumbers.ToEnumerableAsync()).Count;

            #region Snippet:ReleasePhoneNumbersAsync
            //@@var acquiredPhoneNumber = "<acquired_phone_number>";
            var releaseOperation = client.StartReleasePhoneNumber(new PhoneNumberIdentifier(acquiredPhoneNumber));
            //@@ await releaseOperation.WaitForCompletionAsync();
            /*@@*/ await WaitForCompletionAsync(releaseOperation);

            #endregion Snippet:ReleasePhoneNumbersAsync

            acquiredPhoneNumbers = client.GetAllPhoneNumbersAsync(locale);
            var afterReleaseNumberCount = (await acquiredPhoneNumbers.ToEnumerableAsync()).Count;
            Assert.AreEqual(1, beforeReleaseNumberCount - afterReleaseNumberCount);
        }
        public void PurchaseAndRelease()
        {
            if (!IncludePhoneNumberLiveTests)
            {
                Assert.Ignore("Include phone number live tests flag is off.");
            }

            const string locale           = "en-US";
            var          connectionString = TestEnvironment.ConnectionString;

            #region Snippet:CreatePhoneNumberAdministrationClient
            // Get a connection string to our Azure Communication resource.
            //@@var connectionString = "<connection_string>";
            var client = new PhoneNumberAdministrationClient(connectionString);
            #endregion Snippet:CreatePhoneNumberAdministrationClient

            client = CreateClient(false);

            const string countryCode = "US";

            #region Snippet:GetPhonePlanGroups
            var phonePlanGroups = client.GetPhonePlanGroups(countryCode, locale);

            foreach (var phonePlanGroup in phonePlanGroups)
            {
                Console.WriteLine($"Plan group: {phonePlanGroup.LocalizedName}, type: {phonePlanGroup.PhoneNumberType}");
            }
            #endregion Snippet:GetPhonePlanGroups

            var tollFreePhonePlanGroup = phonePlanGroups.First(group => group.PhoneNumberType == PhoneNumberType.TollFree);
            var phonePlanGroupId       = tollFreePhonePlanGroup.PhonePlanGroupId;

            #region Snippet:GetPhonePlans
            var phonePlans = client.GetPhonePlans(countryCode, phonePlanGroupId, locale);
            foreach (var phonePlan in phonePlans)
            {
                Console.WriteLine($"Plan: {phonePlan.LocalizedName}, {phonePlan.LocationType}");
            }
            #endregion Snippet:GetPhonePlans

            var tollFreePhonePlan = phonePlans.First();
            var phonePlanId       = tollFreePhonePlan.PhonePlanId;
            var areaCode          = tollFreePhonePlan.AreaCodes.First();

            #region Snippet:ReservePhoneNumbers
            var reservationName        = "My reservation";
            var reservationDescription = "reservation description";
            var reservationOptions     = new CreateReservationOptions(reservationName, reservationDescription, new[] { phonePlanId }, areaCode);
            reservationOptions.Quantity = 1;

            var reserveOperation = client.StartReservation(reservationOptions);

            while (!reserveOperation.HasCompleted)
            {
                //@@ Thread.Sleep(2000);
                /*@@*/ SleepIfNotInPlaybackMode();

                reserveOperation.UpdateStatus();
            }

            #endregion Snippet:ReservePhoneNumbers

            reserveOperation = new PhoneNumberReservationOperation(client, reserveOperation.Id);

            #region Snippet:PersistReservePhoneNumbersOperation
            var reservationId = reserveOperation.Id;

            // persist reservationId and then continue with a new operation

            //@@var reserveOperation = new PhoneNumberReservationOperation(client, reservationId);

            while (!reserveOperation.HasCompleted)
            {
                //@@ Thread.Sleep(2000);
                /*@@*/ SleepIfNotInPlaybackMode();

                reserveOperation.UpdateStatus();
            }
            #endregion Snippet:PersistReservePhoneNumbersOperation

            #region Snippet:StartPurchaseReservation
            var purchaseOperation = client.StartPurchaseReservation(reservationId);

            while (!purchaseOperation.HasCompleted)
            {
                //@@ Thread.Sleep(2000);
                /*@@*/ SleepIfNotInPlaybackMode();

                purchaseOperation.UpdateStatus();
            }
            #endregion Snippet:StartPurchaseReservation

            #region Snippet:ListAcquiredPhoneNumbers
            var acquiredPhoneNumbers = client.GetAllPhoneNumbers(locale);

            foreach (var phoneNumber in acquiredPhoneNumbers)
            {
                Console.WriteLine($"Phone number: {phoneNumber.PhoneNumber}, activation state: {phoneNumber.ActivationState}");
            }
            #endregion Snippet:ListAcquiredPhoneNumbers

            var acquiredPhoneNumber = reserveOperation.Value.PhoneNumbers.Single();
            acquiredPhoneNumbers = client.GetAllPhoneNumbers(locale);
            var beforeReleaseNumberCount = acquiredPhoneNumbers.Count();

            #region Snippet:ReleasePhoneNumbers
            //@@var acquiredPhoneNumber = "<acquired_phone_number>";
            var releaseOperation = client.StartReleasePhoneNumber(new PhoneNumberIdentifier(acquiredPhoneNumber));

            while (!releaseOperation.HasCompleted)
            {
                //@@ Thread.Sleep(2000);
                /*@@*/ SleepIfNotInPlaybackMode();

                releaseOperation.UpdateStatus();
            }
            #endregion Snippet:ReleasePhoneNumbers

            acquiredPhoneNumbers = client.GetAllPhoneNumbers(locale);
            var afterReleaseNumberCount = acquiredPhoneNumbers.Count();
            Assert.AreEqual(1, beforeReleaseNumberCount - afterReleaseNumberCount);
        }