# 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 UpdateDeliverabilityTestOptions(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',
        'description': 'str',
        'start_at': 'datetime',
        'max_duration_seconds': 'int',
        'clear_max_duration': 'bool',
        'success_threshold_percent': 'float',
        'clear_success_threshold': 'bool',
        'expectations': 'list[DeliverabilityExpectation]'
    }

    attribute_map = {
        'name': 'name',
        'description': 'description',
        'start_at': 'startAt',
        'max_duration_seconds': 'maxDurationSeconds',
        'clear_max_duration': 'clearMaxDuration',
        'success_threshold_percent': 'successThresholdPercent',
        'clear_success_threshold': 'clearSuccessThreshold',
        'expectations': 'expectations'
    }

    def __init__(self, name=None, description=None, start_at=None, max_duration_seconds=None, clear_max_duration=None, success_threshold_percent=None, clear_success_threshold=None, expectations=None, local_vars_configuration=None):  # noqa: E501
        """UpdateDeliverabilityTestOptions - 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._description = None
        self._start_at = None
        self._max_duration_seconds = None
        self._clear_max_duration = None
        self._success_threshold_percent = None
        self._clear_success_threshold = None
        self._expectations = None
        self.discriminator = None

        self.name = name
        self.description = description
        self.start_at = start_at
        self.max_duration_seconds = max_duration_seconds
        self.clear_max_duration = clear_max_duration
        self.success_threshold_percent = success_threshold_percent
        self.clear_success_threshold = clear_success_threshold
        self.expectations = expectations

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

        Optional updated name  # noqa: E501

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

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

        Optional updated name  # noqa: E501

        :param name: The name of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :type: str
        """

        self._name = name

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

        Optional updated description  # noqa: E501

        :return: The description of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description):
        """Sets the description of this UpdateDeliverabilityTestOptions.

        Optional updated description  # noqa: E501

        :param description: The description of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :type: str
        """

        self._description = description

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

        Optional updated receive-window start time. Only applied while test is not terminal.  # noqa: E501

        :return: The start_at of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :rtype: datetime
        """
        return self._start_at

    @start_at.setter
    def start_at(self, start_at):
        """Sets the start_at of this UpdateDeliverabilityTestOptions.

        Optional updated receive-window start time. Only applied while test is not terminal.  # noqa: E501

        :param start_at: The start_at of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :type: datetime
        """

        self._start_at = start_at

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

        Optional updated timeout in seconds  # noqa: E501

        :return: The max_duration_seconds of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :rtype: int
        """
        return self._max_duration_seconds

    @max_duration_seconds.setter
    def max_duration_seconds(self, max_duration_seconds):
        """Sets the max_duration_seconds of this UpdateDeliverabilityTestOptions.

        Optional updated timeout in seconds  # noqa: E501

        :param max_duration_seconds: The max_duration_seconds of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :type: int
        """
        if (self.local_vars_configuration.client_side_validation and
                max_duration_seconds is not None and max_duration_seconds < 1):  # noqa: E501
            raise ValueError("Invalid value for `max_duration_seconds`, must be a value greater than or equal to `1`")  # noqa: E501

        self._max_duration_seconds = max_duration_seconds

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

        Set true to clear timeout. If true, maxDurationSeconds is ignored for this request.  # noqa: E501

        :return: The clear_max_duration of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :rtype: bool
        """
        return self._clear_max_duration

    @clear_max_duration.setter
    def clear_max_duration(self, clear_max_duration):
        """Sets the clear_max_duration of this UpdateDeliverabilityTestOptions.

        Set true to clear timeout. If true, maxDurationSeconds is ignored for this request.  # noqa: E501

        :param clear_max_duration: The clear_max_duration of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :type: bool
        """

        self._clear_max_duration = clear_max_duration

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

        Optional updated acceptable success threshold percentage (0,100].  # noqa: E501

        :return: The success_threshold_percent of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :rtype: float
        """
        return self._success_threshold_percent

    @success_threshold_percent.setter
    def success_threshold_percent(self, success_threshold_percent):
        """Sets the success_threshold_percent of this UpdateDeliverabilityTestOptions.

        Optional updated acceptable success threshold percentage (0,100].  # noqa: E501

        :param success_threshold_percent: The success_threshold_percent of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :type: float
        """
        if (self.local_vars_configuration.client_side_validation and
                success_threshold_percent is not None and success_threshold_percent > 100.0):  # noqa: E501
            raise ValueError("Invalid value for `success_threshold_percent`, must be a value less than or equal to `100.0`")  # noqa: E501
        if (self.local_vars_configuration.client_side_validation and
                success_threshold_percent is not None and success_threshold_percent <= 0.0):  # noqa: E501
            raise ValueError("Invalid value for `success_threshold_percent`, must be a value greater than `0.0`")  # noqa: E501

        self._success_threshold_percent = success_threshold_percent

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

        Set true to clear success threshold. If true, successThresholdPercent is ignored for this request.  # noqa: E501

        :return: The clear_success_threshold of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :rtype: bool
        """
        return self._clear_success_threshold

    @clear_success_threshold.setter
    def clear_success_threshold(self, clear_success_threshold):
        """Sets the clear_success_threshold of this UpdateDeliverabilityTestOptions.

        Set true to clear success threshold. If true, successThresholdPercent is ignored for this request.  # noqa: E501

        :param clear_success_threshold: The clear_success_threshold of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :type: bool
        """

        self._clear_success_threshold = clear_success_threshold

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

        Optional replacement expectations  # noqa: E501

        :return: The expectations of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :rtype: list[DeliverabilityExpectation]
        """
        return self._expectations

    @expectations.setter
    def expectations(self, expectations):
        """Sets the expectations of this UpdateDeliverabilityTestOptions.

        Optional replacement expectations  # noqa: E501

        :param expectations: The expectations of this UpdateDeliverabilityTestOptions.  # noqa: E501
        :type: list[DeliverabilityExpectation]
        """

        self._expectations = expectations

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

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