public ImportExportOperationResult GetOperationStatus(string operationStatusLink)
        {
            var client = GetCurrentSqlClient();

            HttpRequestMessage httpRequest = new HttpRequestMessage
            {
                Method     = HttpMethod.Get,
                RequestUri = new Uri(operationStatusLink)
            };

            client.Credentials.ProcessHttpRequestAsync(httpRequest, CancellationToken.None).ConfigureAwait(false).GetAwaiter().GetResult();
            var response = client.HttpClient.SendAsync(httpRequest, CancellationToken.None).ConfigureAwait(false).GetAwaiter().GetResult();

            response.EnsureSuccessStatusCode();

            string responseString = response.Content.ReadAsStringAsync().Result;

            ImportExportOperationResult operationResult = JsonConvert.DeserializeObject <ImportExportOperationResult>(responseString, new JsonSerializerSettings
            {
                Converters = new List <JsonConverter>()
                {
                    new Rest.Serialization.TransformationJsonConverter()
                },
                NullValueHandling = NullValueHandling.Ignore
            });

            return(operationResult);
        }
        /// <summary>
        /// Creates the response model given server response
        /// </summary>
        /// <param name="response">Server Response</param>
        /// <returns>Response Model</returns>
        private AzureSqlDatabaseImportExportBaseModel CreateImportExportResponse(ImportExportOperationResult response, AzureSqlDatabaseImportExportBaseModel originalModel, Uri statusLink)
        {
            AzureSqlDatabaseImportExportBaseModel model = originalModel == null ? new AzureSqlDatabaseImportExportBaseModel() : originalModel.Copy();

            model.OperationStatusLink = statusLink?.ToString();
            return(model);
        }
        /// <summary>
        /// Gets the status of an import/export operation
        /// </summary>
        /// <param name="operationStatusLink">The operation status link</param>
        /// <returns>Operation status response</returns>
        public AzureSqlDatabaseImportExportStatusModel GetStatus(string operationStatusLink)
        {
            HttpResponseMessage         rawHttpResponse;
            ImportExportOperationResult response = Communicator.GetOperationStatus(operationStatusLink, out rawHttpResponse);

            OperationStatus?operationStatus = GetOperationStatusFromHttpStatus(rawHttpResponse.StatusCode);

            AzureSqlDatabaseImportExportStatusModel status = new AzureSqlDatabaseImportExportStatusModel()
            {
                ErrorMessage                 = response.ErrorMessage,
                LastModifiedTime             = response.LastModifiedTime,
                QueuedTime                   = response.QueuedTime,
                StatusMessage                = response.Status, // in spite of the name, the field called "Status" is the correct one to put into the "StatusMessage" field
                Status                       = operationStatus.HasValue ? operationStatus.Value.ToString() : "",
                RequestType                  = response.RequestType,
                PrivateEndpointRequestStatus = response.PrivateEndpointConnections?.Select(pec => new PrivateEndpointRequestStatus()
                {
                    PrivateEndpointConnectionName = pec.PrivateEndpointConnectionName,
                    PrivateLinkServiceId          = pec.PrivateLinkServiceId,
                    Status = pec.Status
                }).ToArray(),
                OperationStatusLink = operationStatusLink
            };

            return(status);
        }
        /// <summary>
        /// Creates the response model given server response
        /// </summary>
        /// <param name="response">Server Response</param>
        /// <returns>Response Model</returns>
        private AzureSqlDatabaseImportExportBaseModel CreateImportExportResponse(ImportExportOperationResult response, AzureSqlDatabaseImportExportBaseModel originalModel, Uri statusLink)
        {
            AzureSqlDatabaseImportExportBaseModel model = originalModel == null ? new AzureSqlDatabaseImportExportBaseModel() : originalModel.Copy();

            model.OperationStatusLink = statusLink?.ToString();
            ////model.Status = response.Status.ToString();
            ////model.ErrorMessage = response.Error == null ? "" : response.Error.Message;
            return(model);
        }
        /// <summary>
        /// Creates new import request
        /// </summary>
        public ImportExportOperationResult BeginImportNewDatabase(string resourceGroupName, string serverName, ImportNewDatabaseDefinition parameters, out Uri operationStatusLink)
        {
            LastLocationHeader = null;
            LocationHeaderResetEvent.Reset();
            ImportExportOperationResult result = GetCurrentSqlClient().Servers.BeginImportDatabase(resourceGroupName, serverName, parameters);

            LocationHeaderResetEvent.WaitOne(3000);
            operationStatusLink = LastLocationHeader;
            return(result);
        }
        /// <summary>
        /// Creates the response model given server response
        /// </summary>
        /// <param name="response">Server Response</param>
        /// <returns>Response Model</returns>
        private AzureSqlDatabaseImportExportBaseModel CreateImportExportResponse(ImportExportOperationResult response, AzureSqlDatabaseImportExportBaseModel originalModel, Uri statusLink)
        {
            AzureSqlDatabaseImportExportBaseModel model = originalModel == null ? new AzureSqlDatabaseImportExportBaseModel() : originalModel.Copy();

            model.OperationStatusLink = statusLink?.ToString();

            // It looks like the ExportDatabase SDK call is currently broken (and returns "null" instead of the response object).
            // I need to check in a sev2 hotfix now. Once the SDK issue has been resolved, un-comment this and the asserts in
            // the test code
            // Also can probably remove the "LastLocationHeader" hack and just rely on the header in the returned results
            // model.Status = response.Status;
            return(model);
        }
        /// <summary>
        /// Gets the status of an import/export operation
        /// </summary>
        /// <param name="operationStatusLink">The operation status link</param>
        /// <returns>Operation status response</returns>
        public AzureSqlDatabaseImportExportStatusModel GetStatus(string operationStatusLink)
        {
            ImportExportOperationResult response = Communicator.GetOperationStatus(operationStatusLink);

            AzureSqlDatabaseImportExportStatusModel status = new AzureSqlDatabaseImportExportStatusModel()
            {
                ErrorMessage                 = response.ErrorMessage,
                LastModifiedTime             = response.LastModifiedTime,
                QueuedTime                   = response.QueuedTime,
                Status                       = response.Status,
                RequestType                  = response.RequestType,
                PrivateEndpointRequestStatus = response.PrivateEndpointConnections?.Select(pec => new PrivateEndpointRequestStatus()
                {
                    PrivateEndpointConnectionName = pec.PrivateEndpointConnectionName,
                    PrivateLinkServiceId          = pec.PrivateLinkServiceId,
                    Status = pec.Status
                }).ToArray(),
                OperationStatusLink = operationStatusLink
            };

            return(status);
        }