# coding: utf-8

"""
    SendinBlue API

    SendinBlue provide a RESTFul API that can be used with any languages. With this API, you will be able to :   - Manage your campaigns and get the statistics   - Manage your contacts   - Send transactional Emails and SMS   - and much more...  You can download our wrappers at https://github.com/orgs/sendinblue  **Possible responses**   | Code | Message |   | :-------------: | ------------- |   | 200  | OK. Successful Request  |   | 201  | OK. Successful Creation |   | 202  | OK. Request accepted |   | 204  | OK. Successful Update/Deletion  |   | 400  | Error. Bad Request  |   | 401  | Error. Authentication Needed  |   | 402  | Error. Not enough credit, plan upgrade needed  |   | 403  | Error. Permission denied  |   | 404  | Error. Object does not exist |   | 405  | Error. Method not allowed  | 

    OpenAPI spec version: 3.0.0
    Contact: contact@sendinblue.com
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


from pprint import pformat
from six import iteritems
import re


class SendSmtpEmail(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """


    """
    Attributes:
      swagger_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.
    """
    swagger_types = {
        'sender': 'SendSmtpEmailSender',
        'to': 'list[SendSmtpEmailTo]',
        'bcc': 'list[SendSmtpEmailBcc]',
        'cc': 'list[SendSmtpEmailCc]',
        'html_content': 'str',
        'text_content': 'str',
        'subject': 'str',
        'reply_to': 'SendSmtpEmailReplyTo',
        'attachment': 'list[SendSmtpEmailAttachment]',
        'headers': 'dict(str, str)'
    }

    attribute_map = {
        'sender': 'sender',
        'to': 'to',
        'bcc': 'bcc',
        'cc': 'cc',
        'html_content': 'htmlContent',
        'text_content': 'textContent',
        'subject': 'subject',
        'reply_to': 'replyTo',
        'attachment': 'attachment',
        'headers': 'headers'
    }

    def __init__(self, sender=None, to=None, bcc=None, cc=None, html_content=None, text_content=None, subject=None, reply_to=None, attachment=None, headers=None):
        """
        SendSmtpEmail - a model defined in Swagger
        """

        self._sender = None
        self._to = None
        self._bcc = None
        self._cc = None
        self._html_content = None
        self._text_content = None
        self._subject = None
        self._reply_to = None
        self._attachment = None
        self._headers = None

        if sender is not None:
          self.sender = sender
        self.to = to
        if bcc is not None:
          self.bcc = bcc
        if cc is not None:
          self.cc = cc
        self.html_content = html_content
        if text_content is not None:
          self.text_content = text_content
        self.subject = subject
        if reply_to is not None:
          self.reply_to = reply_to
        if attachment is not None:
          self.attachment = attachment
        if headers is not None:
          self.headers = headers

    @property
    def sender(self):
        """
        Gets the sender of this SendSmtpEmail.

        :return: The sender of this SendSmtpEmail.
        :rtype: SendSmtpEmailSender
        """
        return self._sender

    @sender.setter
    def sender(self, sender):
        """
        Sets the sender of this SendSmtpEmail.

        :param sender: The sender of this SendSmtpEmail.
        :type: SendSmtpEmailSender
        """

        self._sender = sender

    @property
    def to(self):
        """
        Gets the to of this SendSmtpEmail.
        Email addresses and names of the recipients

        :return: The to of this SendSmtpEmail.
        :rtype: list[SendSmtpEmailTo]
        """
        return self._to

    @to.setter
    def to(self, to):
        """
        Sets the to of this SendSmtpEmail.
        Email addresses and names of the recipients

        :param to: The to of this SendSmtpEmail.
        :type: list[SendSmtpEmailTo]
        """
        if to is None:
            raise ValueError("Invalid value for `to`, must not be `None`")

        self._to = to

    @property
    def bcc(self):
        """
        Gets the bcc of this SendSmtpEmail.
        Email addresses and names of the recipients in bcc

        :return: The bcc of this SendSmtpEmail.
        :rtype: list[SendSmtpEmailBcc]
        """
        return self._bcc

    @bcc.setter
    def bcc(self, bcc):
        """
        Sets the bcc of this SendSmtpEmail.
        Email addresses and names of the recipients in bcc

        :param bcc: The bcc of this SendSmtpEmail.
        :type: list[SendSmtpEmailBcc]
        """

        self._bcc = bcc

    @property
    def cc(self):
        """
        Gets the cc of this SendSmtpEmail.
        Email addresses and names of the recipients in cc

        :return: The cc of this SendSmtpEmail.
        :rtype: list[SendSmtpEmailCc]
        """
        return self._cc

    @cc.setter
    def cc(self, cc):
        """
        Sets the cc of this SendSmtpEmail.
        Email addresses and names of the recipients in cc

        :param cc: The cc of this SendSmtpEmail.
        :type: list[SendSmtpEmailCc]
        """

        self._cc = cc

    @property
    def html_content(self):
        """
        Gets the html_content of this SendSmtpEmail.
        HTML body of the message

        :return: The html_content of this SendSmtpEmail.
        :rtype: str
        """
        return self._html_content

    @html_content.setter
    def html_content(self, html_content):
        """
        Sets the html_content of this SendSmtpEmail.
        HTML body of the message

        :param html_content: The html_content of this SendSmtpEmail.
        :type: str
        """
        if html_content is None:
            raise ValueError("Invalid value for `html_content`, must not be `None`")

        self._html_content = html_content

    @property
    def text_content(self):
        """
        Gets the text_content of this SendSmtpEmail.
        Plain Text body of the message

        :return: The text_content of this SendSmtpEmail.
        :rtype: str
        """
        return self._text_content

    @text_content.setter
    def text_content(self, text_content):
        """
        Sets the text_content of this SendSmtpEmail.
        Plain Text body of the message

        :param text_content: The text_content of this SendSmtpEmail.
        :type: str
        """

        self._text_content = text_content

    @property
    def subject(self):
        """
        Gets the subject of this SendSmtpEmail.
        Subject of the message

        :return: The subject of this SendSmtpEmail.
        :rtype: str
        """
        return self._subject

    @subject.setter
    def subject(self, subject):
        """
        Sets the subject of this SendSmtpEmail.
        Subject of the message

        :param subject: The subject of this SendSmtpEmail.
        :type: str
        """
        if subject is None:
            raise ValueError("Invalid value for `subject`, must not be `None`")

        self._subject = subject

    @property
    def reply_to(self):
        """
        Gets the reply_to of this SendSmtpEmail.

        :return: The reply_to of this SendSmtpEmail.
        :rtype: SendSmtpEmailReplyTo
        """
        return self._reply_to

    @reply_to.setter
    def reply_to(self, reply_to):
        """
        Sets the reply_to of this SendSmtpEmail.

        :param reply_to: The reply_to of this SendSmtpEmail.
        :type: SendSmtpEmailReplyTo
        """

        self._reply_to = reply_to

    @property
    def attachment(self):
        """
        Gets the attachment of this SendSmtpEmail.
        Pass the absolute URL (no local file) or the base64 content of the attachment. Name can be used in both cases to define the attachment name. It is mandatory in case of content. Extension allowed: gif, png, bmp, cgm, jpg, jpeg, tif, tiff, rtf, txt, css, shtml, html, htm, csv, zip, pdf, xml, ods, doc, docx, docm, ics, xls, xlsx, ppt, tar, and ez

        :return: The attachment of this SendSmtpEmail.
        :rtype: list[SendSmtpEmailAttachment]
        """
        return self._attachment

    @attachment.setter
    def attachment(self, attachment):
        """
        Sets the attachment of this SendSmtpEmail.
        Pass the absolute URL (no local file) or the base64 content of the attachment. Name can be used in both cases to define the attachment name. It is mandatory in case of content. Extension allowed: gif, png, bmp, cgm, jpg, jpeg, tif, tiff, rtf, txt, css, shtml, html, htm, csv, zip, pdf, xml, ods, doc, docx, docm, ics, xls, xlsx, ppt, tar, and ez

        :param attachment: The attachment of this SendSmtpEmail.
        :type: list[SendSmtpEmailAttachment]
        """

        self._attachment = attachment

    @property
    def headers(self):
        """
        Gets the headers of this SendSmtpEmail.

        :return: The headers of this SendSmtpEmail.
        :rtype: dict(str, str)
        """
        return self._headers

    @headers.setter
    def headers(self, headers):
        """
        Sets the headers of this SendSmtpEmail.

        :param headers: The headers of this SendSmtpEmail.
        :type: dict(str, str)
        """

        self._headers = headers

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

        for attr, _ in iteritems(self.swagger_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 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, SendSmtpEmail):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """
        Returns true if both objects are not equal
        """
        return not self == other
