# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
#
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.
# --------------------------------------------------------------------------

from msrest.service_client import SDKClient
from msrest import Serializer, Deserializer
from msrestazure import AzureConfiguration
from .version import VERSION
from .operations.protection_intent_operations import ProtectionIntentOperations
from .operations.backup_status_operations import BackupStatusOperations
from .operations.feature_support_operations import FeatureSupportOperations
from .operations.backup_jobs_operations import BackupJobsOperations
from .operations.job_details_operations import JobDetailsOperations
from .operations.export_jobs_operation_results_operations import ExportJobsOperationResultsOperations
from .operations.jobs_operations import JobsOperations
from .operations.backup_policies_operations import BackupPoliciesOperations
from .operations.backup_protected_items_operations import BackupProtectedItemsOperations
from .operations.backup_usage_summaries_operations import BackupUsageSummariesOperations
from .operations.backup_resource_vault_configs_operations import BackupResourceVaultConfigsOperations
from .operations.backup_engines_operations import BackupEnginesOperations
from .operations.protection_container_refresh_operation_results_operations import ProtectionContainerRefreshOperationResultsOperations
from .operations.protectable_containers_operations import ProtectableContainersOperations
from .operations.protection_containers_operations import ProtectionContainersOperations
from .operations.backup_workload_items_operations import BackupWorkloadItemsOperations
from .operations.protection_container_operation_results_operations import ProtectionContainerOperationResultsOperations
from .operations.protected_items_operations import ProtectedItemsOperations
from .operations.backups_operations import BackupsOperations
from .operations.protected_item_operation_results_operations import ProtectedItemOperationResultsOperations
from .operations.protected_item_operation_statuses_operations import ProtectedItemOperationStatusesOperations
from .operations.recovery_points_operations import RecoveryPointsOperations
from .operations.item_level_recovery_connections_operations import ItemLevelRecoveryConnectionsOperations
from .operations.restores_operations import RestoresOperations
from .operations.job_cancellations_operations import JobCancellationsOperations
from .operations.job_operation_results_operations import JobOperationResultsOperations
from .operations.backup_operation_results_operations import BackupOperationResultsOperations
from .operations.backup_operation_statuses_operations import BackupOperationStatusesOperations
from .operations.protection_policies_operations import ProtectionPoliciesOperations
from .operations.protection_policy_operation_results_operations import ProtectionPolicyOperationResultsOperations
from .operations.protection_policy_operation_statuses_operations import ProtectionPolicyOperationStatusesOperations
from .operations.backup_protectable_items_operations import BackupProtectableItemsOperations
from .operations.backup_protection_containers_operations import BackupProtectionContainersOperations
from .operations.security_pi_ns_operations import SecurityPINsOperations
from .operations.backup_resource_storage_configs_operations import BackupResourceStorageConfigsOperations
from .operations.operations import Operations
from . import models


class RecoveryServicesBackupClientConfiguration(AzureConfiguration):
    """Configuration for RecoveryServicesBackupClient
    Note that all parameters used to create this instance are saved as instance
    attributes.

    :param credentials: Credentials needed for the client to connect to Azure.
    :type credentials: :mod:`A msrestazure Credentials
     object<msrestazure.azure_active_directory>`
    :param subscription_id: The subscription Id.
    :type subscription_id: str
    :param str base_url: Service URL
    """

    def __init__(
            self, credentials, subscription_id, base_url=None):

        if credentials is None:
            raise ValueError("Parameter 'credentials' must not be None.")
        if subscription_id is None:
            raise ValueError("Parameter 'subscription_id' must not be None.")
        if not base_url:
            base_url = 'https://management.azure.com'

        super(RecoveryServicesBackupClientConfiguration, self).__init__(base_url)

        self.add_user_agent('azure-mgmt-recoveryservicesbackup/{}'.format(VERSION))
        self.add_user_agent('Azure-SDK-For-Python')

        self.credentials = credentials
        self.subscription_id = subscription_id


class RecoveryServicesBackupClient(SDKClient):
    """Open API 2.0 Specs for Azure RecoveryServices Backup service

    :ivar config: Configuration for client.
    :vartype config: RecoveryServicesBackupClientConfiguration

    :ivar protection_intent: ProtectionIntent operations
    :vartype protection_intent: azure.mgmt.recoveryservicesbackup.operations.ProtectionIntentOperations
    :ivar backup_status: BackupStatus operations
    :vartype backup_status: azure.mgmt.recoveryservicesbackup.operations.BackupStatusOperations
    :ivar feature_support: FeatureSupport operations
    :vartype feature_support: azure.mgmt.recoveryservicesbackup.operations.FeatureSupportOperations
    :ivar backup_jobs: BackupJobs operations
    :vartype backup_jobs: azure.mgmt.recoveryservicesbackup.operations.BackupJobsOperations
    :ivar job_details: JobDetails operations
    :vartype job_details: azure.mgmt.recoveryservicesbackup.operations.JobDetailsOperations
    :ivar export_jobs_operation_results: ExportJobsOperationResults operations
    :vartype export_jobs_operation_results: azure.mgmt.recoveryservicesbackup.operations.ExportJobsOperationResultsOperations
    :ivar jobs: Jobs operations
    :vartype jobs: azure.mgmt.recoveryservicesbackup.operations.JobsOperations
    :ivar backup_policies: BackupPolicies operations
    :vartype backup_policies: azure.mgmt.recoveryservicesbackup.operations.BackupPoliciesOperations
    :ivar backup_protected_items: BackupProtectedItems operations
    :vartype backup_protected_items: azure.mgmt.recoveryservicesbackup.operations.BackupProtectedItemsOperations
    :ivar backup_usage_summaries: BackupUsageSummaries operations
    :vartype backup_usage_summaries: azure.mgmt.recoveryservicesbackup.operations.BackupUsageSummariesOperations
    :ivar backup_resource_vault_configs: BackupResourceVaultConfigs operations
    :vartype backup_resource_vault_configs: azure.mgmt.recoveryservicesbackup.operations.BackupResourceVaultConfigsOperations
    :ivar backup_engines: BackupEngines operations
    :vartype backup_engines: azure.mgmt.recoveryservicesbackup.operations.BackupEnginesOperations
    :ivar protection_container_refresh_operation_results: ProtectionContainerRefreshOperationResults operations
    :vartype protection_container_refresh_operation_results: azure.mgmt.recoveryservicesbackup.operations.ProtectionContainerRefreshOperationResultsOperations
    :ivar protectable_containers: ProtectableContainers operations
    :vartype protectable_containers: azure.mgmt.recoveryservicesbackup.operations.ProtectableContainersOperations
    :ivar protection_containers: ProtectionContainers operations
    :vartype protection_containers: azure.mgmt.recoveryservicesbackup.operations.ProtectionContainersOperations
    :ivar backup_workload_items: BackupWorkloadItems operations
    :vartype backup_workload_items: azure.mgmt.recoveryservicesbackup.operations.BackupWorkloadItemsOperations
    :ivar protection_container_operation_results: ProtectionContainerOperationResults operations
    :vartype protection_container_operation_results: azure.mgmt.recoveryservicesbackup.operations.ProtectionContainerOperationResultsOperations
    :ivar protected_items: ProtectedItems operations
    :vartype protected_items: azure.mgmt.recoveryservicesbackup.operations.ProtectedItemsOperations
    :ivar backups: Backups operations
    :vartype backups: azure.mgmt.recoveryservicesbackup.operations.BackupsOperations
    :ivar protected_item_operation_results: ProtectedItemOperationResults operations
    :vartype protected_item_operation_results: azure.mgmt.recoveryservicesbackup.operations.ProtectedItemOperationResultsOperations
    :ivar protected_item_operation_statuses: ProtectedItemOperationStatuses operations
    :vartype protected_item_operation_statuses: azure.mgmt.recoveryservicesbackup.operations.ProtectedItemOperationStatusesOperations
    :ivar recovery_points: RecoveryPoints operations
    :vartype recovery_points: azure.mgmt.recoveryservicesbackup.operations.RecoveryPointsOperations
    :ivar item_level_recovery_connections: ItemLevelRecoveryConnections operations
    :vartype item_level_recovery_connections: azure.mgmt.recoveryservicesbackup.operations.ItemLevelRecoveryConnectionsOperations
    :ivar restores: Restores operations
    :vartype restores: azure.mgmt.recoveryservicesbackup.operations.RestoresOperations
    :ivar job_cancellations: JobCancellations operations
    :vartype job_cancellations: azure.mgmt.recoveryservicesbackup.operations.JobCancellationsOperations
    :ivar job_operation_results: JobOperationResults operations
    :vartype job_operation_results: azure.mgmt.recoveryservicesbackup.operations.JobOperationResultsOperations
    :ivar backup_operation_results: BackupOperationResults operations
    :vartype backup_operation_results: azure.mgmt.recoveryservicesbackup.operations.BackupOperationResultsOperations
    :ivar backup_operation_statuses: BackupOperationStatuses operations
    :vartype backup_operation_statuses: azure.mgmt.recoveryservicesbackup.operations.BackupOperationStatusesOperations
    :ivar protection_policies: ProtectionPolicies operations
    :vartype protection_policies: azure.mgmt.recoveryservicesbackup.operations.ProtectionPoliciesOperations
    :ivar protection_policy_operation_results: ProtectionPolicyOperationResults operations
    :vartype protection_policy_operation_results: azure.mgmt.recoveryservicesbackup.operations.ProtectionPolicyOperationResultsOperations
    :ivar protection_policy_operation_statuses: ProtectionPolicyOperationStatuses operations
    :vartype protection_policy_operation_statuses: azure.mgmt.recoveryservicesbackup.operations.ProtectionPolicyOperationStatusesOperations
    :ivar backup_protectable_items: BackupProtectableItems operations
    :vartype backup_protectable_items: azure.mgmt.recoveryservicesbackup.operations.BackupProtectableItemsOperations
    :ivar backup_protection_containers: BackupProtectionContainers operations
    :vartype backup_protection_containers: azure.mgmt.recoveryservicesbackup.operations.BackupProtectionContainersOperations
    :ivar security_pi_ns: SecurityPINs operations
    :vartype security_pi_ns: azure.mgmt.recoveryservicesbackup.operations.SecurityPINsOperations
    :ivar backup_resource_storage_configs: BackupResourceStorageConfigs operations
    :vartype backup_resource_storage_configs: azure.mgmt.recoveryservicesbackup.operations.BackupResourceStorageConfigsOperations
    :ivar operations: Operations operations
    :vartype operations: azure.mgmt.recoveryservicesbackup.operations.Operations

    :param credentials: Credentials needed for the client to connect to Azure.
    :type credentials: :mod:`A msrestazure Credentials
     object<msrestazure.azure_active_directory>`
    :param subscription_id: The subscription Id.
    :type subscription_id: str
    :param str base_url: Service URL
    """

    def __init__(
            self, credentials, subscription_id, base_url=None):

        self.config = RecoveryServicesBackupClientConfiguration(credentials, subscription_id, base_url)
        super(RecoveryServicesBackupClient, self).__init__(self.config.credentials, self.config)

        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
        self._serialize = Serializer(client_models)
        self._deserialize = Deserializer(client_models)

        self.protection_intent = ProtectionIntentOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_status = BackupStatusOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.feature_support = FeatureSupportOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_jobs = BackupJobsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.job_details = JobDetailsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.export_jobs_operation_results = ExportJobsOperationResultsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.jobs = JobsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_policies = BackupPoliciesOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_protected_items = BackupProtectedItemsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_usage_summaries = BackupUsageSummariesOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_resource_vault_configs = BackupResourceVaultConfigsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_engines = BackupEnginesOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.protection_container_refresh_operation_results = ProtectionContainerRefreshOperationResultsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.protectable_containers = ProtectableContainersOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.protection_containers = ProtectionContainersOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_workload_items = BackupWorkloadItemsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.protection_container_operation_results = ProtectionContainerOperationResultsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.protected_items = ProtectedItemsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backups = BackupsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.protected_item_operation_results = ProtectedItemOperationResultsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.protected_item_operation_statuses = ProtectedItemOperationStatusesOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.recovery_points = RecoveryPointsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.item_level_recovery_connections = ItemLevelRecoveryConnectionsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.restores = RestoresOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.job_cancellations = JobCancellationsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.job_operation_results = JobOperationResultsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_operation_results = BackupOperationResultsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_operation_statuses = BackupOperationStatusesOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.protection_policies = ProtectionPoliciesOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.protection_policy_operation_results = ProtectionPolicyOperationResultsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.protection_policy_operation_statuses = ProtectionPolicyOperationStatusesOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_protectable_items = BackupProtectableItemsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_protection_containers = BackupProtectionContainersOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.security_pi_ns = SecurityPINsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.backup_resource_storage_configs = BackupResourceStorageConfigsOperations(
            self._client, self.config, self._serialize, self._deserialize)
        self.operations = Operations(
            self._client, self.config, self._serialize, self._deserialize)
