# 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 AnalyzeDmarcReportResults(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 = {
        'metadata': 'DmarcReportMetadata',
        'record_count': 'int',
        'total_messages': 'int',
        'reject_count': 'int',
        'quarantine_count': 'int',
        'none_count': 'int',
        'dkim_aligned_count': 'int',
        'spf_aligned_count': 'int',
        'fully_aligned_count': 'int',
        'failed_alignment_count': 'int',
        'top_sources': 'list[DmarcReportSourceSummary]',
        'warnings': 'list[str]',
        'errors': 'list[str]'
    }

    attribute_map = {
        'metadata': 'metadata',
        'record_count': 'recordCount',
        'total_messages': 'totalMessages',
        'reject_count': 'rejectCount',
        'quarantine_count': 'quarantineCount',
        'none_count': 'noneCount',
        'dkim_aligned_count': 'dkimAlignedCount',
        'spf_aligned_count': 'spfAlignedCount',
        'fully_aligned_count': 'fullyAlignedCount',
        'failed_alignment_count': 'failedAlignmentCount',
        'top_sources': 'topSources',
        'warnings': 'warnings',
        'errors': 'errors'
    }

    def __init__(self, metadata=None, record_count=None, total_messages=None, reject_count=None, quarantine_count=None, none_count=None, dkim_aligned_count=None, spf_aligned_count=None, fully_aligned_count=None, failed_alignment_count=None, top_sources=None, warnings=None, errors=None, local_vars_configuration=None):  # noqa: E501
        """AnalyzeDmarcReportResults - 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._metadata = None
        self._record_count = None
        self._total_messages = None
        self._reject_count = None
        self._quarantine_count = None
        self._none_count = None
        self._dkim_aligned_count = None
        self._spf_aligned_count = None
        self._fully_aligned_count = None
        self._failed_alignment_count = None
        self._top_sources = None
        self._warnings = None
        self._errors = None
        self.discriminator = None

        self.metadata = metadata
        self.record_count = record_count
        self.total_messages = total_messages
        self.reject_count = reject_count
        self.quarantine_count = quarantine_count
        self.none_count = none_count
        self.dkim_aligned_count = dkim_aligned_count
        self.spf_aligned_count = spf_aligned_count
        self.fully_aligned_count = fully_aligned_count
        self.failed_alignment_count = failed_alignment_count
        self.top_sources = top_sources
        self.warnings = warnings
        self.errors = errors

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


        :return: The metadata of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: DmarcReportMetadata
        """
        return self._metadata

    @metadata.setter
    def metadata(self, metadata):
        """Sets the metadata of this AnalyzeDmarcReportResults.


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

        self._metadata = metadata

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


        :return: The record_count of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: int
        """
        return self._record_count

    @record_count.setter
    def record_count(self, record_count):
        """Sets the record_count of this AnalyzeDmarcReportResults.


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

        self._record_count = record_count

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


        :return: The total_messages of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: int
        """
        return self._total_messages

    @total_messages.setter
    def total_messages(self, total_messages):
        """Sets the total_messages of this AnalyzeDmarcReportResults.


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

        self._total_messages = total_messages

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


        :return: The reject_count of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: int
        """
        return self._reject_count

    @reject_count.setter
    def reject_count(self, reject_count):
        """Sets the reject_count of this AnalyzeDmarcReportResults.


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

        self._reject_count = reject_count

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


        :return: The quarantine_count of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: int
        """
        return self._quarantine_count

    @quarantine_count.setter
    def quarantine_count(self, quarantine_count):
        """Sets the quarantine_count of this AnalyzeDmarcReportResults.


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

        self._quarantine_count = quarantine_count

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


        :return: The none_count of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: int
        """
        return self._none_count

    @none_count.setter
    def none_count(self, none_count):
        """Sets the none_count of this AnalyzeDmarcReportResults.


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

        self._none_count = none_count

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


        :return: The dkim_aligned_count of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: int
        """
        return self._dkim_aligned_count

    @dkim_aligned_count.setter
    def dkim_aligned_count(self, dkim_aligned_count):
        """Sets the dkim_aligned_count of this AnalyzeDmarcReportResults.


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

        self._dkim_aligned_count = dkim_aligned_count

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


        :return: The spf_aligned_count of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: int
        """
        return self._spf_aligned_count

    @spf_aligned_count.setter
    def spf_aligned_count(self, spf_aligned_count):
        """Sets the spf_aligned_count of this AnalyzeDmarcReportResults.


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

        self._spf_aligned_count = spf_aligned_count

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


        :return: The fully_aligned_count of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: int
        """
        return self._fully_aligned_count

    @fully_aligned_count.setter
    def fully_aligned_count(self, fully_aligned_count):
        """Sets the fully_aligned_count of this AnalyzeDmarcReportResults.


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

        self._fully_aligned_count = fully_aligned_count

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


        :return: The failed_alignment_count of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: int
        """
        return self._failed_alignment_count

    @failed_alignment_count.setter
    def failed_alignment_count(self, failed_alignment_count):
        """Sets the failed_alignment_count of this AnalyzeDmarcReportResults.


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

        self._failed_alignment_count = failed_alignment_count

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


        :return: The top_sources of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: list[DmarcReportSourceSummary]
        """
        return self._top_sources

    @top_sources.setter
    def top_sources(self, top_sources):
        """Sets the top_sources of this AnalyzeDmarcReportResults.


        :param top_sources: The top_sources of this AnalyzeDmarcReportResults.  # noqa: E501
        :type: list[DmarcReportSourceSummary]
        """
        if self.local_vars_configuration.client_side_validation and top_sources is None:  # noqa: E501
            raise ValueError("Invalid value for `top_sources`, must not be `None`")  # noqa: E501

        self._top_sources = top_sources

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


        :return: The warnings of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: list[str]
        """
        return self._warnings

    @warnings.setter
    def warnings(self, warnings):
        """Sets the warnings of this AnalyzeDmarcReportResults.


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

        self._warnings = warnings

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


        :return: The errors of this AnalyzeDmarcReportResults.  # noqa: E501
        :rtype: list[str]
        """
        return self._errors

    @errors.setter
    def errors(self, errors):
        """Sets the errors of this AnalyzeDmarcReportResults.


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

        self._errors = errors

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

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