# 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 TestSmtpServerResults(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 = {
        'connected': 'bool',
        'banner': 'str',
        'tls': 'SmtpTlsDiagnosticResult',
        'auth': 'SmtpAuthDiagnosticResult',
        'transcript': 'list[SmtpDiagnosticStep]',
        'warnings': 'list[str]',
        'errors': 'list[str]'
    }

    attribute_map = {
        'connected': 'connected',
        'banner': 'banner',
        'tls': 'tls',
        'auth': 'auth',
        'transcript': 'transcript',
        'warnings': 'warnings',
        'errors': 'errors'
    }

    def __init__(self, connected=None, banner=None, tls=None, auth=None, transcript=None, warnings=None, errors=None, local_vars_configuration=None):  # noqa: E501
        """TestSmtpServerResults - 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._connected = None
        self._banner = None
        self._tls = None
        self._auth = None
        self._transcript = None
        self._warnings = None
        self._errors = None
        self.discriminator = None

        self.connected = connected
        self.banner = banner
        self.tls = tls
        self.auth = auth
        self.transcript = transcript
        self.warnings = warnings
        self.errors = errors

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


        :return: The connected of this TestSmtpServerResults.  # noqa: E501
        :rtype: bool
        """
        return self._connected

    @connected.setter
    def connected(self, connected):
        """Sets the connected of this TestSmtpServerResults.


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

        self._connected = connected

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


        :return: The banner of this TestSmtpServerResults.  # noqa: E501
        :rtype: str
        """
        return self._banner

    @banner.setter
    def banner(self, banner):
        """Sets the banner of this TestSmtpServerResults.


        :param banner: The banner of this TestSmtpServerResults.  # noqa: E501
        :type: str
        """

        self._banner = banner

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


        :return: The tls of this TestSmtpServerResults.  # noqa: E501
        :rtype: SmtpTlsDiagnosticResult
        """
        return self._tls

    @tls.setter
    def tls(self, tls):
        """Sets the tls of this TestSmtpServerResults.


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

        self._tls = tls

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


        :return: The auth of this TestSmtpServerResults.  # noqa: E501
        :rtype: SmtpAuthDiagnosticResult
        """
        return self._auth

    @auth.setter
    def auth(self, auth):
        """Sets the auth of this TestSmtpServerResults.


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

        self._auth = auth

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


        :return: The transcript of this TestSmtpServerResults.  # noqa: E501
        :rtype: list[SmtpDiagnosticStep]
        """
        return self._transcript

    @transcript.setter
    def transcript(self, transcript):
        """Sets the transcript of this TestSmtpServerResults.


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

        self._transcript = transcript

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


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

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


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


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

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


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

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