# 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 CheckDnsPropagationResults(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 = {
        'host': 'str',
        'record_type': 'str',
        'expected_value': 'str',
        'propagated_to_all_resolvers': 'bool',
        'responding_resolver_count': 'int',
        'matching_resolver_count': 'int',
        'resolver_results': 'list[DnsPropagationResolverResult]',
        'warnings': 'list[str]',
        'errors': 'list[str]'
    }

    attribute_map = {
        'host': 'host',
        'record_type': 'recordType',
        'expected_value': 'expectedValue',
        'propagated_to_all_resolvers': 'propagatedToAllResolvers',
        'responding_resolver_count': 'respondingResolverCount',
        'matching_resolver_count': 'matchingResolverCount',
        'resolver_results': 'resolverResults',
        'warnings': 'warnings',
        'errors': 'errors'
    }

    def __init__(self, host=None, record_type=None, expected_value=None, propagated_to_all_resolvers=None, responding_resolver_count=None, matching_resolver_count=None, resolver_results=None, warnings=None, errors=None, local_vars_configuration=None):  # noqa: E501
        """CheckDnsPropagationResults - 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._host = None
        self._record_type = None
        self._expected_value = None
        self._propagated_to_all_resolvers = None
        self._responding_resolver_count = None
        self._matching_resolver_count = None
        self._resolver_results = None
        self._warnings = None
        self._errors = None
        self.discriminator = None

        self.host = host
        self.record_type = record_type
        self.expected_value = expected_value
        self.propagated_to_all_resolvers = propagated_to_all_resolvers
        self.responding_resolver_count = responding_resolver_count
        self.matching_resolver_count = matching_resolver_count
        self.resolver_results = resolver_results
        self.warnings = warnings
        self.errors = errors

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


        :return: The host of this CheckDnsPropagationResults.  # noqa: E501
        :rtype: str
        """
        return self._host

    @host.setter
    def host(self, host):
        """Sets the host of this CheckDnsPropagationResults.


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

        self._host = host

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

        Domain Name Server Record Types  # noqa: E501

        :return: The record_type of this CheckDnsPropagationResults.  # noqa: E501
        :rtype: str
        """
        return self._record_type

    @record_type.setter
    def record_type(self, record_type):
        """Sets the record_type of this CheckDnsPropagationResults.

        Domain Name Server Record Types  # noqa: E501

        :param record_type: The record_type of this CheckDnsPropagationResults.  # noqa: E501
        :type: str
        """
        if self.local_vars_configuration.client_side_validation and record_type is None:  # noqa: E501
            raise ValueError("Invalid value for `record_type`, must not be `None`")  # noqa: E501
        allowed_values = ["A", "NS", "MD", "MF", "CNAME", "SOA", "MB", "MG", "MR", "NULL", "WKS", "PTR", "HINFO", "MINFO", "MX", "TXT", "RP", "AFSDB", "X25", "ISDN", "RT", "NSAP", "NSAP_PTR", "SIG", "KEY", "PX", "GPOS", "AAAA", "LOC", "NXT", "EID", "NIMLOC", "SRV", "ATMA", "NAPTR", "KX", "CERT", "A6", "DNAME", "SINK", "OPT", "APL", "DS", "SSHFP", "IPSECKEY", "RRSIG", "NSEC", "DNSKEY", "DHCID", "NSEC3", "NSEC3PARAM", "TLSA", "SMIMEA", "HIP", "NINFO", "RKEY", "TALINK", "CDS", "CDNSKEY", "OPENPGPKEY", "CSYNC", "ZONEMD", "SVCB", "HTTPS", "SPF", "UINFO", "UID", "GID", "UNSPEC", "NID", "L32", "L64", "LP", "EUI48", "EUI64", "TKEY", "TSIG", "IXFR", "AXFR", "MAILB", "MAILA", "ANY", "URI", "CAA", "AVC", "DOA", "AMTRELAY", "TA", "DLV"]  # noqa: E501
        if self.local_vars_configuration.client_side_validation and record_type not in allowed_values:  # noqa: E501
            raise ValueError(
                "Invalid value for `record_type` ({0}), must be one of {1}"  # noqa: E501
                .format(record_type, allowed_values)
            )

        self._record_type = record_type

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


        :return: The expected_value of this CheckDnsPropagationResults.  # noqa: E501
        :rtype: str
        """
        return self._expected_value

    @expected_value.setter
    def expected_value(self, expected_value):
        """Sets the expected_value of this CheckDnsPropagationResults.


        :param expected_value: The expected_value of this CheckDnsPropagationResults.  # noqa: E501
        :type: str
        """

        self._expected_value = expected_value

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


        :return: The propagated_to_all_resolvers of this CheckDnsPropagationResults.  # noqa: E501
        :rtype: bool
        """
        return self._propagated_to_all_resolvers

    @propagated_to_all_resolvers.setter
    def propagated_to_all_resolvers(self, propagated_to_all_resolvers):
        """Sets the propagated_to_all_resolvers of this CheckDnsPropagationResults.


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

        self._propagated_to_all_resolvers = propagated_to_all_resolvers

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


        :return: The responding_resolver_count of this CheckDnsPropagationResults.  # noqa: E501
        :rtype: int
        """
        return self._responding_resolver_count

    @responding_resolver_count.setter
    def responding_resolver_count(self, responding_resolver_count):
        """Sets the responding_resolver_count of this CheckDnsPropagationResults.


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

        self._responding_resolver_count = responding_resolver_count

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


        :return: The matching_resolver_count of this CheckDnsPropagationResults.  # noqa: E501
        :rtype: int
        """
        return self._matching_resolver_count

    @matching_resolver_count.setter
    def matching_resolver_count(self, matching_resolver_count):
        """Sets the matching_resolver_count of this CheckDnsPropagationResults.


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

        self._matching_resolver_count = matching_resolver_count

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


        :return: The resolver_results of this CheckDnsPropagationResults.  # noqa: E501
        :rtype: list[DnsPropagationResolverResult]
        """
        return self._resolver_results

    @resolver_results.setter
    def resolver_results(self, resolver_results):
        """Sets the resolver_results of this CheckDnsPropagationResults.


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

        self._resolver_results = resolver_results

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


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

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


        :param warnings: The warnings of this CheckDnsPropagationResults.  # 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 CheckDnsPropagationResults.  # noqa: E501


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

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


        :param errors: The errors of this CheckDnsPropagationResults.  # 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, CheckDnsPropagationResults):
            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, CheckDnsPropagationResults):
            return True

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