# coding: utf-8

"""
    DataDomain Rest API Documentation

    No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)  # noqa: E501

    OpenAPI spec version: 1.0
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


import pprint
import re  # noqa: F401

import six

from dd_sdk_1_0.configuration import Configuration


class MtreeInfoDetail(object):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """

    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'id': 'str',
        'name': 'str',
        'deletable': 'bool',
        'del_status': 'int',
        'ro_status': 'int',
        'repl_destination': 'bool',
        'rl_status': 'int',
        'rl_mode': 'int',
        'tenant': 'str',
        'tenant_unit': 'str',
        'physical_capacity': 'Capacity',
        'logical_capacity': 'Capacity',
        'capacity_usage_details': 'list[CapacityUsageDetails]',
        'quota_config': 'QuotaConfig',
        'protocol_config': 'list[ProtocolName]',
        'link': 'list[RestLinkRep]'
    }

    attribute_map = {
        'id': 'id',
        'name': 'name',
        'deletable': 'deletable',
        'del_status': 'del_status',
        'ro_status': 'ro_status',
        'repl_destination': 'repl_destination',
        'rl_status': 'rl_status',
        'rl_mode': 'rl_mode',
        'tenant': 'tenant',
        'tenant_unit': 'tenant_unit',
        'physical_capacity': 'physical_capacity',
        'logical_capacity': 'logical_capacity',
        'capacity_usage_details': 'capacity_usage_details',
        'quota_config': 'quota_config',
        'protocol_config': 'protocol_config',
        'link': 'link'
    }

    def __init__(self, id=None, name=None, deletable=None, del_status=None, ro_status=None, repl_destination=None, rl_status=None, rl_mode=None, tenant=None, tenant_unit=None, physical_capacity=None, logical_capacity=None, capacity_usage_details=None, quota_config=None, protocol_config=None, link=None, _configuration=None):  # noqa: E501
        """MtreeInfoDetail - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._id = None
        self._name = None
        self._deletable = None
        self._del_status = None
        self._ro_status = None
        self._repl_destination = None
        self._rl_status = None
        self._rl_mode = None
        self._tenant = None
        self._tenant_unit = None
        self._physical_capacity = None
        self._logical_capacity = None
        self._capacity_usage_details = None
        self._quota_config = None
        self._protocol_config = None
        self._link = None
        self.discriminator = None

        self.id = id
        if name is not None:
            self.name = name
        if deletable is not None:
            self.deletable = deletable
        if del_status is not None:
            self.del_status = del_status
        if ro_status is not None:
            self.ro_status = ro_status
        if repl_destination is not None:
            self.repl_destination = repl_destination
        if rl_status is not None:
            self.rl_status = rl_status
        if rl_mode is not None:
            self.rl_mode = rl_mode
        if tenant is not None:
            self.tenant = tenant
        if tenant_unit is not None:
            self.tenant_unit = tenant_unit
        if physical_capacity is not None:
            self.physical_capacity = physical_capacity
        if logical_capacity is not None:
            self.logical_capacity = logical_capacity
        if capacity_usage_details is not None:
            self.capacity_usage_details = capacity_usage_details
        if quota_config is not None:
            self.quota_config = quota_config
        if protocol_config is not None:
            self.protocol_config = protocol_config
        if link is not None:
            self.link = link

    @property
    def id(self):
        """Gets the id of this MtreeInfoDetail.  # noqa: E501


        :return: The id of this MtreeInfoDetail.  # noqa: E501
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this MtreeInfoDetail.


        :param id: The id of this MtreeInfoDetail.  # noqa: E501
        :type: str
        """
        if self._configuration.client_side_validation and id is None:
            raise ValueError("Invalid value for `id`, must not be `None`")  # noqa: E501

        self._id = id

    @property
    def name(self):
        """Gets the name of this MtreeInfoDetail.  # noqa: E501


        :return: The name of this MtreeInfoDetail.  # noqa: E501
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name):
        """Sets the name of this MtreeInfoDetail.


        :param name: The name of this MtreeInfoDetail.  # noqa: E501
        :type: str
        """

        self._name = name

    @property
    def deletable(self):
        """Gets the deletable of this MtreeInfoDetail.  # noqa: E501

        False when there is a protocol attached on this Mtree  # noqa: E501

        :return: The deletable of this MtreeInfoDetail.  # noqa: E501
        :rtype: bool
        """
        return self._deletable

    @deletable.setter
    def deletable(self, deletable):
        """Sets the deletable of this MtreeInfoDetail.

        False when there is a protocol attached on this Mtree  # noqa: E501

        :param deletable: The deletable of this MtreeInfoDetail.  # noqa: E501
        :type: bool
        """

        self._deletable = deletable

    @property
    def del_status(self):
        """Gets the del_status of this MtreeInfoDetail.  # noqa: E501

        0: not deleted; 1: deleted  # noqa: E501

        :return: The del_status of this MtreeInfoDetail.  # noqa: E501
        :rtype: int
        """
        return self._del_status

    @del_status.setter
    def del_status(self, del_status):
        """Sets the del_status of this MtreeInfoDetail.

        0: not deleted; 1: deleted  # noqa: E501

        :param del_status: The del_status of this MtreeInfoDetail.  # noqa: E501
        :type: int
        """
        if (self._configuration.client_side_validation and
                del_status is not None and del_status < 0):  # noqa: E501
            raise ValueError("Invalid value for `del_status`, must be a value greater than or equal to `0`")  # noqa: E501

        self._del_status = del_status

    @property
    def ro_status(self):
        """Gets the ro_status of this MtreeInfoDetail.  # noqa: E501

        0: RW; 1: RO  # noqa: E501

        :return: The ro_status of this MtreeInfoDetail.  # noqa: E501
        :rtype: int
        """
        return self._ro_status

    @ro_status.setter
    def ro_status(self, ro_status):
        """Sets the ro_status of this MtreeInfoDetail.

        0: RW; 1: RO  # noqa: E501

        :param ro_status: The ro_status of this MtreeInfoDetail.  # noqa: E501
        :type: int
        """
        if (self._configuration.client_side_validation and
                ro_status is not None and ro_status < 0):  # noqa: E501
            raise ValueError("Invalid value for `ro_status`, must be a value greater than or equal to `0`")  # noqa: E501

        self._ro_status = ro_status

    @property
    def repl_destination(self):
        """Gets the repl_destination of this MtreeInfoDetail.  # noqa: E501

        true: Mtree is a replication destination  # noqa: E501

        :return: The repl_destination of this MtreeInfoDetail.  # noqa: E501
        :rtype: bool
        """
        return self._repl_destination

    @repl_destination.setter
    def repl_destination(self, repl_destination):
        """Sets the repl_destination of this MtreeInfoDetail.

        true: Mtree is a replication destination  # noqa: E501

        :param repl_destination: The repl_destination of this MtreeInfoDetail.  # noqa: E501
        :type: bool
        """

        self._repl_destination = repl_destination

    @property
    def rl_status(self):
        """Gets the rl_status of this MtreeInfoDetail.  # noqa: E501

        Retention lock status: 0: never enabled; 1: currently enabled; 2: previously enabled  # noqa: E501

        :return: The rl_status of this MtreeInfoDetail.  # noqa: E501
        :rtype: int
        """
        return self._rl_status

    @rl_status.setter
    def rl_status(self, rl_status):
        """Sets the rl_status of this MtreeInfoDetail.

        Retention lock status: 0: never enabled; 1: currently enabled; 2: previously enabled  # noqa: E501

        :param rl_status: The rl_status of this MtreeInfoDetail.  # noqa: E501
        :type: int
        """
        if (self._configuration.client_side_validation and
                rl_status is not None and rl_status < 0):  # noqa: E501
            raise ValueError("Invalid value for `rl_status`, must be a value greater than or equal to `0`")  # noqa: E501

        self._rl_status = rl_status

    @property
    def rl_mode(self):
        """Gets the rl_mode of this MtreeInfoDetail.  # noqa: E501

        Retention lock mode: 0: none; 1: governance; 2: compliance  # noqa: E501

        :return: The rl_mode of this MtreeInfoDetail.  # noqa: E501
        :rtype: int
        """
        return self._rl_mode

    @rl_mode.setter
    def rl_mode(self, rl_mode):
        """Sets the rl_mode of this MtreeInfoDetail.

        Retention lock mode: 0: none; 1: governance; 2: compliance  # noqa: E501

        :param rl_mode: The rl_mode of this MtreeInfoDetail.  # noqa: E501
        :type: int
        """
        if (self._configuration.client_side_validation and
                rl_mode is not None and rl_mode < 0):  # noqa: E501
            raise ValueError("Invalid value for `rl_mode`, must be a value greater than or equal to `0`")  # noqa: E501

        self._rl_mode = rl_mode

    @property
    def tenant(self):
        """Gets the tenant of this MtreeInfoDetail.  # noqa: E501


        :return: The tenant of this MtreeInfoDetail.  # noqa: E501
        :rtype: str
        """
        return self._tenant

    @tenant.setter
    def tenant(self, tenant):
        """Sets the tenant of this MtreeInfoDetail.


        :param tenant: The tenant of this MtreeInfoDetail.  # noqa: E501
        :type: str
        """

        self._tenant = tenant

    @property
    def tenant_unit(self):
        """Gets the tenant_unit of this MtreeInfoDetail.  # noqa: E501


        :return: The tenant_unit of this MtreeInfoDetail.  # noqa: E501
        :rtype: str
        """
        return self._tenant_unit

    @tenant_unit.setter
    def tenant_unit(self, tenant_unit):
        """Sets the tenant_unit of this MtreeInfoDetail.


        :param tenant_unit: The tenant_unit of this MtreeInfoDetail.  # noqa: E501
        :type: str
        """

        self._tenant_unit = tenant_unit

    @property
    def physical_capacity(self):
        """Gets the physical_capacity of this MtreeInfoDetail.  # noqa: E501

        Physical capacity is currently available  # noqa: E501

        :return: The physical_capacity of this MtreeInfoDetail.  # noqa: E501
        :rtype: Capacity
        """
        return self._physical_capacity

    @physical_capacity.setter
    def physical_capacity(self, physical_capacity):
        """Sets the physical_capacity of this MtreeInfoDetail.

        Physical capacity is currently available  # noqa: E501

        :param physical_capacity: The physical_capacity of this MtreeInfoDetail.  # noqa: E501
        :type: Capacity
        """

        self._physical_capacity = physical_capacity

    @property
    def logical_capacity(self):
        """Gets the logical_capacity of this MtreeInfoDetail.  # noqa: E501


        :return: The logical_capacity of this MtreeInfoDetail.  # noqa: E501
        :rtype: Capacity
        """
        return self._logical_capacity

    @logical_capacity.setter
    def logical_capacity(self, logical_capacity):
        """Sets the logical_capacity of this MtreeInfoDetail.


        :param logical_capacity: The logical_capacity of this MtreeInfoDetail.  # noqa: E501
        :type: Capacity
        """

        self._logical_capacity = logical_capacity

    @property
    def capacity_usage_details(self):
        """Gets the capacity_usage_details of this MtreeInfoDetail.  # noqa: E501

        include tier information  # noqa: E501

        :return: The capacity_usage_details of this MtreeInfoDetail.  # noqa: E501
        :rtype: list[CapacityUsageDetails]
        """
        return self._capacity_usage_details

    @capacity_usage_details.setter
    def capacity_usage_details(self, capacity_usage_details):
        """Sets the capacity_usage_details of this MtreeInfoDetail.

        include tier information  # noqa: E501

        :param capacity_usage_details: The capacity_usage_details of this MtreeInfoDetail.  # noqa: E501
        :type: list[CapacityUsageDetails]
        """

        self._capacity_usage_details = capacity_usage_details

    @property
    def quota_config(self):
        """Gets the quota_config of this MtreeInfoDetail.  # noqa: E501


        :return: The quota_config of this MtreeInfoDetail.  # noqa: E501
        :rtype: QuotaConfig
        """
        return self._quota_config

    @quota_config.setter
    def quota_config(self, quota_config):
        """Sets the quota_config of this MtreeInfoDetail.


        :param quota_config: The quota_config of this MtreeInfoDetail.  # noqa: E501
        :type: QuotaConfig
        """

        self._quota_config = quota_config

    @property
    def protocol_config(self):
        """Gets the protocol_config of this MtreeInfoDetail.  # noqa: E501


        :return: The protocol_config of this MtreeInfoDetail.  # noqa: E501
        :rtype: list[ProtocolName]
        """
        return self._protocol_config

    @protocol_config.setter
    def protocol_config(self, protocol_config):
        """Sets the protocol_config of this MtreeInfoDetail.


        :param protocol_config: The protocol_config of this MtreeInfoDetail.  # noqa: E501
        :type: list[ProtocolName]
        """

        self._protocol_config = protocol_config

    @property
    def link(self):
        """Gets the link of this MtreeInfoDetail.  # noqa: E501


        :return: The link of this MtreeInfoDetail.  # noqa: E501
        :rtype: list[RestLinkRep]
        """
        return self._link

    @link.setter
    def link(self, link):
        """Sets the link of this MtreeInfoDetail.


        :param link: The link of this MtreeInfoDetail.  # noqa: E501
        :type: list[RestLinkRep]
        """

        self._link = link

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value
        if issubclass(MtreeInfoDetail, dict):
            for key, value in self.items():
                result[key] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, MtreeInfoDetail):
            return False

        return self.to_dict() == other.to_dict()

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        if not isinstance(other, MtreeInfoDetail):
            return True

        return self.to_dict() != other.to_dict()
