# 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 DevicePreviewFeedbackDto(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 = {
        'feedback_id': 'str',
        'user_id': 'str',
        'source': 'str',
        'category': 'str',
        'status': 'str',
        'rating': 'int',
        'run_id': 'str',
        'target_id': 'str',
        'screenshot_id': 'str',
        'provider': 'str',
        'title': 'str',
        'comment': 'str',
        'internal_note': 'str',
        'session_id': 'str',
        'live_view_url': 'str',
        'metadata': 'dict(str, str)',
        'created_at': 'datetime',
        'updated_at': 'datetime'
    }

    attribute_map = {
        'feedback_id': 'feedbackId',
        'user_id': 'userId',
        'source': 'source',
        'category': 'category',
        'status': 'status',
        'rating': 'rating',
        'run_id': 'runId',
        'target_id': 'targetId',
        'screenshot_id': 'screenshotId',
        'provider': 'provider',
        'title': 'title',
        'comment': 'comment',
        'internal_note': 'internalNote',
        'session_id': 'sessionId',
        'live_view_url': 'liveViewUrl',
        'metadata': 'metadata',
        'created_at': 'createdAt',
        'updated_at': 'updatedAt'
    }

    def __init__(self, feedback_id=None, user_id=None, source=None, category=None, status=None, rating=None, run_id=None, target_id=None, screenshot_id=None, provider=None, title=None, comment=None, internal_note=None, session_id=None, live_view_url=None, metadata=None, created_at=None, updated_at=None, local_vars_configuration=None):  # noqa: E501
        """DevicePreviewFeedbackDto - 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._feedback_id = None
        self._user_id = None
        self._source = None
        self._category = None
        self._status = None
        self._rating = None
        self._run_id = None
        self._target_id = None
        self._screenshot_id = None
        self._provider = None
        self._title = None
        self._comment = None
        self._internal_note = None
        self._session_id = None
        self._live_view_url = None
        self._metadata = None
        self._created_at = None
        self._updated_at = None
        self.discriminator = None

        self.feedback_id = feedback_id
        self.user_id = user_id
        self.source = source
        self.category = category
        self.status = status
        if rating is not None:
            self.rating = rating
        if run_id is not None:
            self.run_id = run_id
        if target_id is not None:
            self.target_id = target_id
        if screenshot_id is not None:
            self.screenshot_id = screenshot_id
        if provider is not None:
            self.provider = provider
        if title is not None:
            self.title = title
        if comment is not None:
            self.comment = comment
        if internal_note is not None:
            self.internal_note = internal_note
        if session_id is not None:
            self.session_id = session_id
        if live_view_url is not None:
            self.live_view_url = live_view_url
        if metadata is not None:
            self.metadata = metadata
        if created_at is not None:
            self.created_at = created_at
        if updated_at is not None:
            self.updated_at = updated_at

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


        :return: The feedback_id of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._feedback_id

    @feedback_id.setter
    def feedback_id(self, feedback_id):
        """Sets the feedback_id of this DevicePreviewFeedbackDto.


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

        self._feedback_id = feedback_id

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


        :return: The user_id of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._user_id

    @user_id.setter
    def user_id(self, user_id):
        """Sets the user_id of this DevicePreviewFeedbackDto.


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

        self._user_id = user_id

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


        :return: The source of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._source

    @source.setter
    def source(self, source):
        """Sets the source of this DevicePreviewFeedbackDto.


        :param source: The source of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: str
        """
        if self.local_vars_configuration.client_side_validation and source is None:  # noqa: E501
            raise ValueError("Invalid value for `source`, must not be `None`")  # noqa: E501
        allowed_values = ["API_SERVICE", "LAB_USER", "END_USER", "SYSTEM"]  # noqa: E501
        if self.local_vars_configuration.client_side_validation and source not in allowed_values:  # noqa: E501
            raise ValueError(
                "Invalid value for `source` ({0}), must be one of {1}"  # noqa: E501
                .format(source, allowed_values)
            )

        self._source = source

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


        :return: The category of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._category

    @category.setter
    def category(self, category):
        """Sets the category of this DevicePreviewFeedbackDto.


        :param category: The category of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: str
        """
        if self.local_vars_configuration.client_side_validation and category is None:  # noqa: E501
            raise ValueError("Invalid value for `category`, must not be `None`")  # noqa: E501
        allowed_values = ["GENERAL", "RUN_QUALITY", "SCREENSHOT_QUALITY", "PROVIDER_ISSUE", "BUG_REPORT", "FEATURE_REQUEST", "NOTE"]  # noqa: E501
        if self.local_vars_configuration.client_side_validation and category not in allowed_values:  # noqa: E501
            raise ValueError(
                "Invalid value for `category` ({0}), must be one of {1}"  # noqa: E501
                .format(category, allowed_values)
            )

        self._category = category

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


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

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


        :param status: The status of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: str
        """
        if self.local_vars_configuration.client_side_validation and status is None:  # noqa: E501
            raise ValueError("Invalid value for `status`, must not be `None`")  # noqa: E501
        allowed_values = ["OPEN", "ACKNOWLEDGED", "RESOLVED", "DISMISSED"]  # noqa: E501
        if self.local_vars_configuration.client_side_validation and status not in allowed_values:  # noqa: E501
            raise ValueError(
                "Invalid value for `status` ({0}), must be one of {1}"  # noqa: E501
                .format(status, allowed_values)
            )

        self._status = status

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


        :return: The rating of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: int
        """
        return self._rating

    @rating.setter
    def rating(self, rating):
        """Sets the rating of this DevicePreviewFeedbackDto.


        :param rating: The rating of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: int
        """

        self._rating = rating

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


        :return: The run_id of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._run_id

    @run_id.setter
    def run_id(self, run_id):
        """Sets the run_id of this DevicePreviewFeedbackDto.


        :param run_id: The run_id of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: str
        """

        self._run_id = run_id

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


        :return: The target_id of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._target_id

    @target_id.setter
    def target_id(self, target_id):
        """Sets the target_id of this DevicePreviewFeedbackDto.


        :param target_id: The target_id of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: str
        """

        self._target_id = target_id

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


        :return: The screenshot_id of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._screenshot_id

    @screenshot_id.setter
    def screenshot_id(self, screenshot_id):
        """Sets the screenshot_id of this DevicePreviewFeedbackDto.


        :param screenshot_id: The screenshot_id of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: str
        """

        self._screenshot_id = screenshot_id

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


        :return: The provider of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._provider

    @provider.setter
    def provider(self, provider):
        """Sets the provider of this DevicePreviewFeedbackDto.


        :param provider: The provider of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: str
        """
        allowed_values = ["GMAIL", "OUTLOOK", "YAHOO"]  # noqa: E501
        if self.local_vars_configuration.client_side_validation and provider not in allowed_values:  # noqa: E501
            raise ValueError(
                "Invalid value for `provider` ({0}), must be one of {1}"  # noqa: E501
                .format(provider, allowed_values)
            )

        self._provider = provider

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


        :return: The title of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._title

    @title.setter
    def title(self, title):
        """Sets the title of this DevicePreviewFeedbackDto.


        :param title: The title of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: str
        """

        self._title = title

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


        :return: The comment of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._comment

    @comment.setter
    def comment(self, comment):
        """Sets the comment of this DevicePreviewFeedbackDto.


        :param comment: The comment of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: str
        """

        self._comment = comment

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


        :return: The internal_note of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._internal_note

    @internal_note.setter
    def internal_note(self, internal_note):
        """Sets the internal_note of this DevicePreviewFeedbackDto.


        :param internal_note: The internal_note of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: str
        """

        self._internal_note = internal_note

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


        :return: The session_id of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._session_id

    @session_id.setter
    def session_id(self, session_id):
        """Sets the session_id of this DevicePreviewFeedbackDto.


        :param session_id: The session_id of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: str
        """

        self._session_id = session_id

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


        :return: The live_view_url of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: str
        """
        return self._live_view_url

    @live_view_url.setter
    def live_view_url(self, live_view_url):
        """Sets the live_view_url of this DevicePreviewFeedbackDto.


        :param live_view_url: The live_view_url of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: str
        """

        self._live_view_url = live_view_url

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


        :return: The metadata of this DevicePreviewFeedbackDto.  # noqa: E501
        :rtype: dict(str, str)
        """
        return self._metadata

    @metadata.setter
    def metadata(self, metadata):
        """Sets the metadata of this DevicePreviewFeedbackDto.


        :param metadata: The metadata of this DevicePreviewFeedbackDto.  # noqa: E501
        :type: dict(str, str)
        """

        self._metadata = metadata

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


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

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


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

        self._created_at = created_at

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


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

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


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

        self._updated_at = updated_at

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

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