# coding: utf-8

"""
    Zarban API

    API for Zarban services.  # noqa: E501

    The version of the OpenAPI document: 2.0.0
    Contact: info@zarban.io
    Generated by: https://openapi-generator.tech
"""


import pprint
import re  # noqa: F401

import six

from zarban.service.openapi_client.configuration import Configuration


class StablecoinSystemStats(object):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_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.
    """
    openapi_types = {
        'system_surplus': 'SystemSurplus',
        'system_debt': 'SystemDebt',
        'system_debt_ceiling': 'SystemDebtCeiling',
        'system_surplus_buffer': 'SystemSurplusBuffer',
        'system_bad_debt': 'SystemBadDebt',
        'system_surplus_lot_size': 'SystemSurplusLotSize'
    }

    attribute_map = {
        'system_surplus': 'systemSurplus',
        'system_debt': 'systemDebt',
        'system_debt_ceiling': 'systemDebtCeiling',
        'system_surplus_buffer': 'systemSurplusBuffer',
        'system_bad_debt': 'systemBadDebt',
        'system_surplus_lot_size': 'systemSurplusLotSize'
    }

    def __init__(self, system_surplus=None, system_debt=None, system_debt_ceiling=None, system_surplus_buffer=None, system_bad_debt=None, system_surplus_lot_size=None, local_vars_configuration=None):  # noqa: E501
        """StablecoinSystemStats - a model defined in OpenAPI"""  # noqa: E501
        if local_vars_configuration is None:
            local_vars_configuration = Configuration()
        self.local_vars_configuration = local_vars_configuration

        self._system_surplus = None
        self._system_debt = None
        self._system_debt_ceiling = None
        self._system_surplus_buffer = None
        self._system_bad_debt = None
        self._system_surplus_lot_size = None
        self.discriminator = None

        self.system_surplus = system_surplus
        self.system_debt = system_debt
        self.system_debt_ceiling = system_debt_ceiling
        self.system_surplus_buffer = system_surplus_buffer
        self.system_bad_debt = system_bad_debt
        self.system_surplus_lot_size = system_surplus_lot_size

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


        :return: The system_surplus of this StablecoinSystemStats.  # noqa: E501
        :rtype: SystemSurplus
        """
        return self._system_surplus

    @system_surplus.setter
    def system_surplus(self, system_surplus):
        """Sets the system_surplus of this StablecoinSystemStats.


        :param system_surplus: The system_surplus of this StablecoinSystemStats.  # noqa: E501
        :type: SystemSurplus
        """
        if self.local_vars_configuration.client_side_validation and system_surplus is None:  # noqa: E501
            raise ValueError("Invalid value for `system_surplus`, must not be `None`")  # noqa: E501

        self._system_surplus = system_surplus

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


        :return: The system_debt of this StablecoinSystemStats.  # noqa: E501
        :rtype: SystemDebt
        """
        return self._system_debt

    @system_debt.setter
    def system_debt(self, system_debt):
        """Sets the system_debt of this StablecoinSystemStats.


        :param system_debt: The system_debt of this StablecoinSystemStats.  # noqa: E501
        :type: SystemDebt
        """
        if self.local_vars_configuration.client_side_validation and system_debt is None:  # noqa: E501
            raise ValueError("Invalid value for `system_debt`, must not be `None`")  # noqa: E501

        self._system_debt = system_debt

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


        :return: The system_debt_ceiling of this StablecoinSystemStats.  # noqa: E501
        :rtype: SystemDebtCeiling
        """
        return self._system_debt_ceiling

    @system_debt_ceiling.setter
    def system_debt_ceiling(self, system_debt_ceiling):
        """Sets the system_debt_ceiling of this StablecoinSystemStats.


        :param system_debt_ceiling: The system_debt_ceiling of this StablecoinSystemStats.  # noqa: E501
        :type: SystemDebtCeiling
        """
        if self.local_vars_configuration.client_side_validation and system_debt_ceiling is None:  # noqa: E501
            raise ValueError("Invalid value for `system_debt_ceiling`, must not be `None`")  # noqa: E501

        self._system_debt_ceiling = system_debt_ceiling

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


        :return: The system_surplus_buffer of this StablecoinSystemStats.  # noqa: E501
        :rtype: SystemSurplusBuffer
        """
        return self._system_surplus_buffer

    @system_surplus_buffer.setter
    def system_surplus_buffer(self, system_surplus_buffer):
        """Sets the system_surplus_buffer of this StablecoinSystemStats.


        :param system_surplus_buffer: The system_surplus_buffer of this StablecoinSystemStats.  # noqa: E501
        :type: SystemSurplusBuffer
        """
        if self.local_vars_configuration.client_side_validation and system_surplus_buffer is None:  # noqa: E501
            raise ValueError("Invalid value for `system_surplus_buffer`, must not be `None`")  # noqa: E501

        self._system_surplus_buffer = system_surplus_buffer

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


        :return: The system_bad_debt of this StablecoinSystemStats.  # noqa: E501
        :rtype: SystemBadDebt
        """
        return self._system_bad_debt

    @system_bad_debt.setter
    def system_bad_debt(self, system_bad_debt):
        """Sets the system_bad_debt of this StablecoinSystemStats.


        :param system_bad_debt: The system_bad_debt of this StablecoinSystemStats.  # noqa: E501
        :type: SystemBadDebt
        """
        if self.local_vars_configuration.client_side_validation and system_bad_debt is None:  # noqa: E501
            raise ValueError("Invalid value for `system_bad_debt`, must not be `None`")  # noqa: E501

        self._system_bad_debt = system_bad_debt

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


        :return: The system_surplus_lot_size of this StablecoinSystemStats.  # noqa: E501
        :rtype: SystemSurplusLotSize
        """
        return self._system_surplus_lot_size

    @system_surplus_lot_size.setter
    def system_surplus_lot_size(self, system_surplus_lot_size):
        """Sets the system_surplus_lot_size of this StablecoinSystemStats.


        :param system_surplus_lot_size: The system_surplus_lot_size of this StablecoinSystemStats.  # noqa: E501
        :type: SystemSurplusLotSize
        """
        if self.local_vars_configuration.client_side_validation and system_surplus_lot_size is None:  # noqa: E501
            raise ValueError("Invalid value for `system_surplus_lot_size`, must not be `None`")  # noqa: E501

        self._system_surplus_lot_size = system_surplus_lot_size

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

        for attr, _ in six.iteritems(self.openapi_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

        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, StablecoinSystemStats):
            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, StablecoinSystemStats):
            return True

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