# coding: utf-8

"""
    MailSlurp API

    MailSlurp is an API for sending and receiving emails and SMS from dynamically allocated email addresses and phone numbers. It's designed for developers and QA teams to test applications, process inbound emails, send templated notifications, attachments, and more.  ## Resources  - [Homepage](https://www.mailslurp.com) - Get an [API KEY](https://app.mailslurp.com/sign-up/) - Generated [SDK Clients](https://docs.mailslurp.com/) - [Examples](https://github.com/mailslurp/examples) repository  # noqa: E501

    The version of the OpenAPI document: 6.5.2
    Contact: contact@mailslurp.dev
    Generated by: https://openapi-generator.tech
"""


import pprint
import re  # noqa: F401

import six

from mailslurp_client.configuration import Configuration


class TenantReputationStatusRowDto(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 = {
        'account_region': 'str',
        'tenant_name': 'str',
        'tenant_arn': 'str',
        'sending_status': 'str',
        'reputation_status': 'str',
        'reputation_policy': 'str',
        'customer_managed_sending_status': 'str',
        'aws_managed_sending_status': 'str',
        'finding_count': 'int',
        'bounce_rate': 'float',
        'complaint_rate': 'float',
        'send_last_hour': 'float',
        'metric_timestamp': 'datetime',
        'error': 'str'
    }

    attribute_map = {
        'account_region': 'accountRegion',
        'tenant_name': 'tenantName',
        'tenant_arn': 'tenantArn',
        'sending_status': 'sendingStatus',
        'reputation_status': 'reputationStatus',
        'reputation_policy': 'reputationPolicy',
        'customer_managed_sending_status': 'customerManagedSendingStatus',
        'aws_managed_sending_status': 'awsManagedSendingStatus',
        'finding_count': 'findingCount',
        'bounce_rate': 'bounceRate',
        'complaint_rate': 'complaintRate',
        'send_last_hour': 'sendLastHour',
        'metric_timestamp': 'metricTimestamp',
        'error': 'error'
    }

    def __init__(self, account_region=None, tenant_name=None, tenant_arn=None, sending_status=None, reputation_status=None, reputation_policy=None, customer_managed_sending_status=None, aws_managed_sending_status=None, finding_count=None, bounce_rate=None, complaint_rate=None, send_last_hour=None, metric_timestamp=None, error=None, local_vars_configuration=None):  # noqa: E501
        """TenantReputationStatusRowDto - 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._account_region = None
        self._tenant_name = None
        self._tenant_arn = None
        self._sending_status = None
        self._reputation_status = None
        self._reputation_policy = None
        self._customer_managed_sending_status = None
        self._aws_managed_sending_status = None
        self._finding_count = None
        self._bounce_rate = None
        self._complaint_rate = None
        self._send_last_hour = None
        self._metric_timestamp = None
        self._error = None
        self.discriminator = None

        self.account_region = account_region
        self.tenant_name = tenant_name
        if tenant_arn is not None:
            self.tenant_arn = tenant_arn
        if sending_status is not None:
            self.sending_status = sending_status
        if reputation_status is not None:
            self.reputation_status = reputation_status
        if reputation_policy is not None:
            self.reputation_policy = reputation_policy
        if customer_managed_sending_status is not None:
            self.customer_managed_sending_status = customer_managed_sending_status
        if aws_managed_sending_status is not None:
            self.aws_managed_sending_status = aws_managed_sending_status
        self.finding_count = finding_count
        if bounce_rate is not None:
            self.bounce_rate = bounce_rate
        if complaint_rate is not None:
            self.complaint_rate = complaint_rate
        if send_last_hour is not None:
            self.send_last_hour = send_last_hour
        if metric_timestamp is not None:
            self.metric_timestamp = metric_timestamp
        if error is not None:
            self.error = error

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


        :return: The account_region of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: str
        """
        return self._account_region

    @account_region.setter
    def account_region(self, account_region):
        """Sets the account_region of this TenantReputationStatusRowDto.


        :param account_region: The account_region of this TenantReputationStatusRowDto.  # noqa: E501
        :type: str
        """
        if self.local_vars_configuration.client_side_validation and account_region is None:  # noqa: E501
            raise ValueError("Invalid value for `account_region`, must not be `None`")  # noqa: E501
        allowed_values = ["US_WEST_2_ACCOUNT_STAGING", "US_EAST_1_ACCOUNT_STAGING", "EU_WEST_1_ACCOUNT_STAGING", "US_WEST_2_ACCOUNT_SES_1", "EU_WEST_1_ACCOUNT_SES_1", "US_WEST_2_ACCOUNT_SES_2", "EU_WEST_1_ACCOUNT_SES_2", "US_WEST_2_ACCOUNT_BYTEWISE", "EU_WEST_1_ACCOUNT_BYTEWISE", "US_WEST_2", "EU_WEST_1", "US_EAST_1"]  # noqa: E501
        if self.local_vars_configuration.client_side_validation and account_region not in allowed_values:  # noqa: E501
            raise ValueError(
                "Invalid value for `account_region` ({0}), must be one of {1}"  # noqa: E501
                .format(account_region, allowed_values)
            )

        self._account_region = account_region

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


        :return: The tenant_name of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: str
        """
        return self._tenant_name

    @tenant_name.setter
    def tenant_name(self, tenant_name):
        """Sets the tenant_name of this TenantReputationStatusRowDto.


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

        self._tenant_name = tenant_name

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


        :return: The tenant_arn of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: str
        """
        return self._tenant_arn

    @tenant_arn.setter
    def tenant_arn(self, tenant_arn):
        """Sets the tenant_arn of this TenantReputationStatusRowDto.


        :param tenant_arn: The tenant_arn of this TenantReputationStatusRowDto.  # noqa: E501
        :type: str
        """

        self._tenant_arn = tenant_arn

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


        :return: The sending_status of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: str
        """
        return self._sending_status

    @sending_status.setter
    def sending_status(self, sending_status):
        """Sets the sending_status of this TenantReputationStatusRowDto.


        :param sending_status: The sending_status of this TenantReputationStatusRowDto.  # noqa: E501
        :type: str
        """

        self._sending_status = sending_status

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


        :return: The reputation_status of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: str
        """
        return self._reputation_status

    @reputation_status.setter
    def reputation_status(self, reputation_status):
        """Sets the reputation_status of this TenantReputationStatusRowDto.


        :param reputation_status: The reputation_status of this TenantReputationStatusRowDto.  # noqa: E501
        :type: str
        """

        self._reputation_status = reputation_status

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


        :return: The reputation_policy of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: str
        """
        return self._reputation_policy

    @reputation_policy.setter
    def reputation_policy(self, reputation_policy):
        """Sets the reputation_policy of this TenantReputationStatusRowDto.


        :param reputation_policy: The reputation_policy of this TenantReputationStatusRowDto.  # noqa: E501
        :type: str
        """

        self._reputation_policy = reputation_policy

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


        :return: The customer_managed_sending_status of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: str
        """
        return self._customer_managed_sending_status

    @customer_managed_sending_status.setter
    def customer_managed_sending_status(self, customer_managed_sending_status):
        """Sets the customer_managed_sending_status of this TenantReputationStatusRowDto.


        :param customer_managed_sending_status: The customer_managed_sending_status of this TenantReputationStatusRowDto.  # noqa: E501
        :type: str
        """

        self._customer_managed_sending_status = customer_managed_sending_status

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


        :return: The aws_managed_sending_status of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: str
        """
        return self._aws_managed_sending_status

    @aws_managed_sending_status.setter
    def aws_managed_sending_status(self, aws_managed_sending_status):
        """Sets the aws_managed_sending_status of this TenantReputationStatusRowDto.


        :param aws_managed_sending_status: The aws_managed_sending_status of this TenantReputationStatusRowDto.  # noqa: E501
        :type: str
        """

        self._aws_managed_sending_status = aws_managed_sending_status

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


        :return: The finding_count of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: int
        """
        return self._finding_count

    @finding_count.setter
    def finding_count(self, finding_count):
        """Sets the finding_count of this TenantReputationStatusRowDto.


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

        self._finding_count = finding_count

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


        :return: The bounce_rate of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: float
        """
        return self._bounce_rate

    @bounce_rate.setter
    def bounce_rate(self, bounce_rate):
        """Sets the bounce_rate of this TenantReputationStatusRowDto.


        :param bounce_rate: The bounce_rate of this TenantReputationStatusRowDto.  # noqa: E501
        :type: float
        """

        self._bounce_rate = bounce_rate

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


        :return: The complaint_rate of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: float
        """
        return self._complaint_rate

    @complaint_rate.setter
    def complaint_rate(self, complaint_rate):
        """Sets the complaint_rate of this TenantReputationStatusRowDto.


        :param complaint_rate: The complaint_rate of this TenantReputationStatusRowDto.  # noqa: E501
        :type: float
        """

        self._complaint_rate = complaint_rate

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


        :return: The send_last_hour of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: float
        """
        return self._send_last_hour

    @send_last_hour.setter
    def send_last_hour(self, send_last_hour):
        """Sets the send_last_hour of this TenantReputationStatusRowDto.


        :param send_last_hour: The send_last_hour of this TenantReputationStatusRowDto.  # noqa: E501
        :type: float
        """

        self._send_last_hour = send_last_hour

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


        :return: The metric_timestamp of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: datetime
        """
        return self._metric_timestamp

    @metric_timestamp.setter
    def metric_timestamp(self, metric_timestamp):
        """Sets the metric_timestamp of this TenantReputationStatusRowDto.


        :param metric_timestamp: The metric_timestamp of this TenantReputationStatusRowDto.  # noqa: E501
        :type: datetime
        """

        self._metric_timestamp = metric_timestamp

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


        :return: The error of this TenantReputationStatusRowDto.  # noqa: E501
        :rtype: str
        """
        return self._error

    @error.setter
    def error(self, error):
        """Sets the error of this TenantReputationStatusRowDto.


        :param error: The error of this TenantReputationStatusRowDto.  # noqa: E501
        :type: str
        """

        self._error = error

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

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