# coding: utf-8

"""
    Statuspage API

    # Code of Conduct Please don't abuse the API, and please report all feature requests and issues to https://support.atlassian.com/contact  # Rate Limiting Each API token is limited to 1 request / second as measured on a 60 second rolling window. To get this limit increased, please contact us at https://support.atlassian.com/contact  Error codes 420 or 429 indicate that you have exceeded the rate limit and the request has been rejected.  # Basics  ## HTTPS It's required  ## URL Prefix In order to maintain version integrity into the future, the API is versioned. All calls currently begin with the following prefix:    https://api.statuspage.io/v1/  ## RESTful Interface Wherever possible, the API seeks to implement repeatable patterns with logical, representative URLs and descriptive HTTP verbs. Below are some examples and conventions you will see throughout the documentation.  * Collections are buckets: https://api.statuspage.io/v1/pages/asdf123/incidents.json * Elements have unique IDs: https://api.statuspage.io/v1/pages/asdf123/incidents/jklm456.json * GET will retrieve information about a collection/element * POST will create an element in a collection * PATCH will update a single element * PUT will replace a single element in a collection (rarely used) * DELETE will destroy a single element  ## Sending Data Information can be sent in the body as form urlencoded or JSON, but make sure the Content-Type header matches the body structure or the server gremlins will be angry.  All examples are provided in JSON format, however they can easily be converted to form encoding if required.  Some examples of how to convert things are below:      // JSON     {       \"incident\": {         \"name\": \"test incident\",         \"components\": [\"8kbf7d35c070\", \"vtnh60py4yd7\"]       }     }      // Form Encoded (using curl as an example):     curl -X POST https://api.statuspage.io/v1/example \\       -d \"incident[name]=test incident\" \\       -d \"incident[components][]=8kbf7d35c070\" \\       -d \"incident[components][]=vtnh60py4yd7\"  # Authentication  <!-- ReDoc-Inject: <security-definitions> -->  # noqa: E501

    OpenAPI spec version: 1.0.0
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import pprint
import re  # noqa: F401

import six

class IncidentUpdate(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 = {
        'id': 'str',
        'incident_id': 'str',
        'affected_components': 'list[object]',
        'body': 'str',
        'created_at': 'datetime',
        'custom_tweet': 'str',
        'deliver_notifications': 'bool',
        'display_at': 'datetime',
        'status': 'str',
        'tweet_id': 'str',
        'twitter_updated_at': 'datetime',
        'updated_at': 'datetime',
        'wants_twitter_update': 'bool'
    }

    attribute_map = {
        'id': 'id',
        'incident_id': 'incident_id',
        'affected_components': 'affected_components',
        'body': 'body',
        'created_at': 'created_at',
        'custom_tweet': 'custom_tweet',
        'deliver_notifications': 'deliver_notifications',
        'display_at': 'display_at',
        'status': 'status',
        'tweet_id': 'tweet_id',
        'twitter_updated_at': 'twitter_updated_at',
        'updated_at': 'updated_at',
        'wants_twitter_update': 'wants_twitter_update'
    }

    def __init__(self, id=None, incident_id=None, affected_components=None, body=None, created_at=None, custom_tweet=None, deliver_notifications=None, display_at=None, status=None, tweet_id=None, twitter_updated_at=None, updated_at=None, wants_twitter_update=None):  # noqa: E501
        """IncidentUpdate - a model defined in Swagger"""  # noqa: E501
        self._id = None
        self._incident_id = None
        self._affected_components = None
        self._body = None
        self._created_at = None
        self._custom_tweet = None
        self._deliver_notifications = None
        self._display_at = None
        self._status = None
        self._tweet_id = None
        self._twitter_updated_at = None
        self._updated_at = None
        self._wants_twitter_update = None
        self.discriminator = None
        if id is not None:
            self.id = id
        if incident_id is not None:
            self.incident_id = incident_id
        if affected_components is not None:
            self.affected_components = affected_components
        if body is not None:
            self.body = body
        if created_at is not None:
            self.created_at = created_at
        if custom_tweet is not None:
            self.custom_tweet = custom_tweet
        if deliver_notifications is not None:
            self.deliver_notifications = deliver_notifications
        if display_at is not None:
            self.display_at = display_at
        if status is not None:
            self.status = status
        if tweet_id is not None:
            self.tweet_id = tweet_id
        if twitter_updated_at is not None:
            self.twitter_updated_at = twitter_updated_at
        if updated_at is not None:
            self.updated_at = updated_at
        if wants_twitter_update is not None:
            self.wants_twitter_update = wants_twitter_update

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

        Incident Update Identifier.  # noqa: E501

        :return: The id of this IncidentUpdate.  # noqa: E501
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this IncidentUpdate.

        Incident Update Identifier.  # noqa: E501

        :param id: The id of this IncidentUpdate.  # noqa: E501
        :type: str
        """

        self._id = id

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

        Incident Identifier.  # noqa: E501

        :return: The incident_id of this IncidentUpdate.  # noqa: E501
        :rtype: str
        """
        return self._incident_id

    @incident_id.setter
    def incident_id(self, incident_id):
        """Sets the incident_id of this IncidentUpdate.

        Incident Identifier.  # noqa: E501

        :param incident_id: The incident_id of this IncidentUpdate.  # noqa: E501
        :type: str
        """

        self._incident_id = incident_id

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

        Affected components associated with the incident update.  # noqa: E501

        :return: The affected_components of this IncidentUpdate.  # noqa: E501
        :rtype: list[object]
        """
        return self._affected_components

    @affected_components.setter
    def affected_components(self, affected_components):
        """Sets the affected_components of this IncidentUpdate.

        Affected components associated with the incident update.  # noqa: E501

        :param affected_components: The affected_components of this IncidentUpdate.  # noqa: E501
        :type: list[object]
        """

        self._affected_components = affected_components

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

        Incident update body.  # noqa: E501

        :return: The body of this IncidentUpdate.  # noqa: E501
        :rtype: str
        """
        return self._body

    @body.setter
    def body(self, body):
        """Sets the body of this IncidentUpdate.

        Incident update body.  # noqa: E501

        :param body: The body of this IncidentUpdate.  # noqa: E501
        :type: str
        """

        self._body = body

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

        The timestamp when the incident update was created at.  # noqa: E501

        :return: The created_at of this IncidentUpdate.  # noqa: E501
        :rtype: datetime
        """
        return self._created_at

    @created_at.setter
    def created_at(self, created_at):
        """Sets the created_at of this IncidentUpdate.

        The timestamp when the incident update was created at.  # noqa: E501

        :param created_at: The created_at of this IncidentUpdate.  # noqa: E501
        :type: datetime
        """

        self._created_at = created_at

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

        An optional customized tweet message for incident postmortem.  # noqa: E501

        :return: The custom_tweet of this IncidentUpdate.  # noqa: E501
        :rtype: str
        """
        return self._custom_tweet

    @custom_tweet.setter
    def custom_tweet(self, custom_tweet):
        """Sets the custom_tweet of this IncidentUpdate.

        An optional customized tweet message for incident postmortem.  # noqa: E501

        :param custom_tweet: The custom_tweet of this IncidentUpdate.  # noqa: E501
        :type: str
        """

        self._custom_tweet = custom_tweet

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

        Controls whether to delivery notifications.  # noqa: E501

        :return: The deliver_notifications of this IncidentUpdate.  # noqa: E501
        :rtype: bool
        """
        return self._deliver_notifications

    @deliver_notifications.setter
    def deliver_notifications(self, deliver_notifications):
        """Sets the deliver_notifications of this IncidentUpdate.

        Controls whether to delivery notifications.  # noqa: E501

        :param deliver_notifications: The deliver_notifications of this IncidentUpdate.  # noqa: E501
        :type: bool
        """

        self._deliver_notifications = deliver_notifications

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

        Timestamp when incident update is happened.  # noqa: E501

        :return: The display_at of this IncidentUpdate.  # noqa: E501
        :rtype: datetime
        """
        return self._display_at

    @display_at.setter
    def display_at(self, display_at):
        """Sets the display_at of this IncidentUpdate.

        Timestamp when incident update is happened.  # noqa: E501

        :param display_at: The display_at of this IncidentUpdate.  # noqa: E501
        :type: datetime
        """

        self._display_at = display_at

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

        The incident status. For realtime incidents, valid values are investigating, identified, monitoring, and resolved. For scheduled incidents, valid values are scheduled, in_progress, verifying, and completed.  # noqa: E501

        :return: The status of this IncidentUpdate.  # noqa: E501
        :rtype: str
        """
        return self._status

    @status.setter
    def status(self, status):
        """Sets the status of this IncidentUpdate.

        The incident status. For realtime incidents, valid values are investigating, identified, monitoring, and resolved. For scheduled incidents, valid values are scheduled, in_progress, verifying, and completed.  # noqa: E501

        :param status: The status of this IncidentUpdate.  # noqa: E501
        :type: str
        """
        allowed_values = ["investigating", "identified", "monitoring", "resolved", "scheduled", "in_progress", "verifying", "completed"]  # noqa: E501
        if status not in allowed_values:
            raise ValueError(
                "Invalid value for `status` ({0}), must be one of {1}"  # noqa: E501
                .format(status, allowed_values)
            )

        self._status = status

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

        Tweet identifier associated to this incident update.  # noqa: E501

        :return: The tweet_id of this IncidentUpdate.  # noqa: E501
        :rtype: str
        """
        return self._tweet_id

    @tweet_id.setter
    def tweet_id(self, tweet_id):
        """Sets the tweet_id of this IncidentUpdate.

        Tweet identifier associated to this incident update.  # noqa: E501

        :param tweet_id: The tweet_id of this IncidentUpdate.  # noqa: E501
        :type: str
        """

        self._tweet_id = tweet_id

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

        The timestamp when twitter updated at.  # noqa: E501

        :return: The twitter_updated_at of this IncidentUpdate.  # noqa: E501
        :rtype: datetime
        """
        return self._twitter_updated_at

    @twitter_updated_at.setter
    def twitter_updated_at(self, twitter_updated_at):
        """Sets the twitter_updated_at of this IncidentUpdate.

        The timestamp when twitter updated at.  # noqa: E501

        :param twitter_updated_at: The twitter_updated_at of this IncidentUpdate.  # noqa: E501
        :type: datetime
        """

        self._twitter_updated_at = twitter_updated_at

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

        The timestamp when the incident update is updated.  # noqa: E501

        :return: The updated_at of this IncidentUpdate.  # noqa: E501
        :rtype: datetime
        """
        return self._updated_at

    @updated_at.setter
    def updated_at(self, updated_at):
        """Sets the updated_at of this IncidentUpdate.

        The timestamp when the incident update is updated.  # noqa: E501

        :param updated_at: The updated_at of this IncidentUpdate.  # noqa: E501
        :type: datetime
        """

        self._updated_at = updated_at

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

        Controls whether to create twitter update.  # noqa: E501

        :return: The wants_twitter_update of this IncidentUpdate.  # noqa: E501
        :rtype: bool
        """
        return self._wants_twitter_update

    @wants_twitter_update.setter
    def wants_twitter_update(self, wants_twitter_update):
        """Sets the wants_twitter_update of this IncidentUpdate.

        Controls whether to create twitter update.  # noqa: E501

        :param wants_twitter_update: The wants_twitter_update of this IncidentUpdate.  # noqa: E501
        :type: bool
        """

        self._wants_twitter_update = wants_twitter_update

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

        for attr, _ in six.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
        if issubclass(IncidentUpdate, dict):
            for key, value in self.items():
                result[key] = 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, IncidentUpdate):
            return False

        return self.__dict__ == other.__dict__

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