# 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 ImapMailboxStatus(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 = {
        'name': 'str',
        'read_only': 'bool',
        'items': 'object',
        'flags': 'list[str]',
        'permanent_flags': 'list[str]',
        'unseen_seq_num': 'int',
        'messages': 'int',
        'recent': 'int',
        'unseen': 'int',
        'uid_next': 'int',
        'uid_validity': 'int',
        'append_limit': 'int'
    }

    attribute_map = {
        'name': 'name',
        'read_only': 'readOnly',
        'items': 'items',
        'flags': 'flags',
        'permanent_flags': 'permanentFlags',
        'unseen_seq_num': 'unseenSeqNum',
        'messages': 'messages',
        'recent': 'recent',
        'unseen': 'unseen',
        'uid_next': 'uidNext',
        'uid_validity': 'uidValidity',
        'append_limit': 'appendLimit'
    }

    def __init__(self, name=None, read_only=None, items=None, flags=None, permanent_flags=None, unseen_seq_num=None, messages=None, recent=None, unseen=None, uid_next=None, uid_validity=None, append_limit=None, local_vars_configuration=None):  # noqa: E501
        """ImapMailboxStatus - 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._name = None
        self._read_only = None
        self._items = None
        self._flags = None
        self._permanent_flags = None
        self._unseen_seq_num = None
        self._messages = None
        self._recent = None
        self._unseen = None
        self._uid_next = None
        self._uid_validity = None
        self._append_limit = None
        self.discriminator = None

        self.name = name
        self.read_only = read_only
        self.items = items
        self.flags = flags
        self.permanent_flags = permanent_flags
        self.unseen_seq_num = unseen_seq_num
        self.messages = messages
        self.recent = recent
        self.unseen = unseen
        self.uid_next = uid_next
        self.uid_validity = uid_validity
        self.append_limit = append_limit

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

        The mailbox name.  # noqa: E501

        :return: The name of this ImapMailboxStatus.  # noqa: E501
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name):
        """Sets the name of this ImapMailboxStatus.

        The mailbox name.  # noqa: E501

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

        self._name = name

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

        True if the mailbox is open in read-only mode.  # noqa: E501

        :return: The read_only of this ImapMailboxStatus.  # noqa: E501
        :rtype: bool
        """
        return self._read_only

    @read_only.setter
    def read_only(self, read_only):
        """Sets the read_only of this ImapMailboxStatus.

        True if the mailbox is open in read-only mode.  # noqa: E501

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

        self._read_only = read_only

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

        Results map  # noqa: E501

        :return: The items of this ImapMailboxStatus.  # noqa: E501
        :rtype: object
        """
        return self._items

    @items.setter
    def items(self, items):
        """Sets the items of this ImapMailboxStatus.

        Results map  # noqa: E501

        :param items: The items of this ImapMailboxStatus.  # noqa: E501
        :type: object
        """

        self._items = items

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

        The mailbox flags.  # noqa: E501

        :return: The flags of this ImapMailboxStatus.  # noqa: E501
        :rtype: list[str]
        """
        return self._flags

    @flags.setter
    def flags(self, flags):
        """Sets the flags of this ImapMailboxStatus.

        The mailbox flags.  # noqa: E501

        :param flags: The flags of this ImapMailboxStatus.  # noqa: E501
        :type: list[str]
        """

        self._flags = flags

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

        The mailbox permanent flags.  # noqa: E501

        :return: The permanent_flags of this ImapMailboxStatus.  # noqa: E501
        :rtype: list[str]
        """
        return self._permanent_flags

    @permanent_flags.setter
    def permanent_flags(self, permanent_flags):
        """Sets the permanent_flags of this ImapMailboxStatus.

        The mailbox permanent flags.  # noqa: E501

        :param permanent_flags: The permanent_flags of this ImapMailboxStatus.  # noqa: E501
        :type: list[str]
        """

        self._permanent_flags = permanent_flags

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

        The sequence number of the first unseen message in the mailbox.  # noqa: E501

        :return: The unseen_seq_num of this ImapMailboxStatus.  # noqa: E501
        :rtype: int
        """
        return self._unseen_seq_num

    @unseen_seq_num.setter
    def unseen_seq_num(self, unseen_seq_num):
        """Sets the unseen_seq_num of this ImapMailboxStatus.

        The sequence number of the first unseen message in the mailbox.  # noqa: E501

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

        self._unseen_seq_num = unseen_seq_num

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

        The number of messages in this mailbox.  # noqa: E501

        :return: The messages of this ImapMailboxStatus.  # noqa: E501
        :rtype: int
        """
        return self._messages

    @messages.setter
    def messages(self, messages):
        """Sets the messages of this ImapMailboxStatus.

        The number of messages in this mailbox.  # noqa: E501

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

        self._messages = messages

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

        The number of messages not seen since the last time the mailbox was opened.  # noqa: E501

        :return: The recent of this ImapMailboxStatus.  # noqa: E501
        :rtype: int
        """
        return self._recent

    @recent.setter
    def recent(self, recent):
        """Sets the recent of this ImapMailboxStatus.

        The number of messages not seen since the last time the mailbox was opened.  # noqa: E501

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

        self._recent = recent

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

        The number of unread messages.  # noqa: E501

        :return: The unseen of this ImapMailboxStatus.  # noqa: E501
        :rtype: int
        """
        return self._unseen

    @unseen.setter
    def unseen(self, unseen):
        """Sets the unseen of this ImapMailboxStatus.

        The number of unread messages.  # noqa: E501

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

        self._unseen = unseen

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

        The next UID.  # noqa: E501

        :return: The uid_next of this ImapMailboxStatus.  # noqa: E501
        :rtype: int
        """
        return self._uid_next

    @uid_next.setter
    def uid_next(self, uid_next):
        """Sets the uid_next of this ImapMailboxStatus.

        The next UID.  # noqa: E501

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

        self._uid_next = uid_next

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

        Together with a UID, it is a unique identifier for a message. Must be greater than or equal to 1.  # noqa: E501

        :return: The uid_validity of this ImapMailboxStatus.  # noqa: E501
        :rtype: int
        """
        return self._uid_validity

    @uid_validity.setter
    def uid_validity(self, uid_validity):
        """Sets the uid_validity of this ImapMailboxStatus.

        Together with a UID, it is a unique identifier for a message. Must be greater than or equal to 1.  # noqa: E501

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

        self._uid_validity = uid_validity

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

        Per-mailbox limit of message size. Set only if server supports the APPENDLIMIT extension  # noqa: E501

        :return: The append_limit of this ImapMailboxStatus.  # noqa: E501
        :rtype: int
        """
        return self._append_limit

    @append_limit.setter
    def append_limit(self, append_limit):
        """Sets the append_limit of this ImapMailboxStatus.

        Per-mailbox limit of message size. Set only if server supports the APPENDLIMIT extension  # noqa: E501

        :param append_limit: The append_limit of this ImapMailboxStatus.  # noqa: E501
        :type: int
        """

        self._append_limit = append_limit

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

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