# 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 CreateDevicePreviewFeedbackOptions(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 = {
        '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)'
    }

    attribute_map = {
        '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'
    }

    def __init__(self, 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, local_vars_configuration=None):  # noqa: E501
        """CreateDevicePreviewFeedbackOptions - 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._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.discriminator = None

        self.source = source
        self.category = category
        if status is not None:
            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

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


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

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


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


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

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


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


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

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


        :param status: The status of this CreateDevicePreviewFeedbackOptions.  # noqa: E501
        :type: str
        """
        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 CreateDevicePreviewFeedbackOptions.  # noqa: E501


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

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


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

        self._rating = rating

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


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

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


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

        self._run_id = run_id

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


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

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


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

        self._target_id = target_id

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


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

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


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

        self._screenshot_id = screenshot_id

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


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

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


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


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

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


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

        self._title = title

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


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

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


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

        self._comment = comment

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


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

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


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

        self._internal_note = internal_note

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


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

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


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

        self._session_id = session_id

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


        :return: The live_view_url of this CreateDevicePreviewFeedbackOptions.  # 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 CreateDevicePreviewFeedbackOptions.


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

        self._live_view_url = live_view_url

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


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

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


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

        self._metadata = metadata

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

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