/// <summary>
 /// Provision subscription
 /// </summary>
 /// <param name="provisioningInfo">provisioning info argument</param>
 /// <returns>async task</returns>
 public Task<Subscription> ProvisionSubscriptionAsync(AzureProvisioningInfo provisioningInfo)
 {
     return this.SendAsync<AzureProvisioningInfo, Subscription>(this.CreateRequestUri(RelativePaths.Subscriptions), HttpMethod.Post, provisioningInfo);
 }
        /// <summary>
        /// Migrates the subscription.
        /// </summary>
        /// <param name="subscriptionId">The subscription id.</param>
        /// <param name="targetPlanId">The target plan id.</param>
        public Task<Subscription> MigrateSubscriptionAsync(string subscriptionId, string targetPlanId)
        {
            var provisioningInfo = new AzureProvisioningInfo()
            {
                SubscriptionId = new Guid(subscriptionId),
                PlanId = targetPlanId
            };

            return this.SendAsync<AzureProvisioningInfo, Subscription>(
                this.CreateRequestUri(
                    string.Format(CultureInfo.InvariantCulture, RelativePaths.Subscription, subscriptionId),
                    new KeyValuePair<string, string>("migrate", bool.TrueString)),
                new HttpMethod(Microsoft.WindowsAzurePack.ResourceProvider.DataContracts.Constants.HttpMethods.Patch),
                provisioningInfo);
        }
        public Task<Subscription> UpdateSubscriptionCoAdminsAsync(string subscriptionId, string[] coAdminNames)
        {
            var provisioningInfo = new AzureProvisioningInfo()
            {
                SubscriptionId = new Guid(subscriptionId),
                CoAdminNames = new List<string>(coAdminNames)
            };

            return this.SendAsync<AzureProvisioningInfo, Subscription>(
                this.CreateRequestUri(string.Format(CultureInfo.InvariantCulture, RelativePaths.Subscription, subscriptionId)),
                new HttpMethod(Microsoft.WindowsAzurePack.ResourceProvider.DataContracts.Constants.HttpMethods.Patch),
                provisioningInfo);
        }
        /// <summary>
        /// Disable subscription
        /// </summary>
        /// <param name="subscriptionId">subscription id argument</param>
        public Task<Subscription> DisableSubscriptionAsync(string subscriptionId)
        {
            var provisioningInfo = new AzureProvisioningInfo()
            {
                Status = SubscriptionStatus.Suspended.ToString(),
                SubscriptionId = new Guid(subscriptionId)
            };

            return this.SendAsync<AzureProvisioningInfo, Subscription>(
                this.CreateRequestUri(string.Format(CultureInfo.InvariantCulture, RelativePaths.Subscription, subscriptionId)),
                new HttpMethod(Microsoft.WindowsAzurePack.ResourceProvider.DataContracts.Constants.HttpMethods.Patch),
                provisioningInfo);
        }