# 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 DevicePreviewProviderProgressDto(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 = {
        'run': 'DevicePreviewRunDto',
        'provider': 'str',
        'status': 'str',
        'target_count': 'int',
        'ready_count': 'int',
        'failed_count': 'int',
        'capturing_count': 'int',
        'pending_count': 'int',
        'targets': 'list[DevicePreviewTargetDto]',
        'screenshots': 'list[DevicePreviewScreenshotDto]'
    }

    attribute_map = {
        'run': 'run',
        'provider': 'provider',
        'status': 'status',
        'target_count': 'targetCount',
        'ready_count': 'readyCount',
        'failed_count': 'failedCount',
        'capturing_count': 'capturingCount',
        'pending_count': 'pendingCount',
        'targets': 'targets',
        'screenshots': 'screenshots'
    }

    def __init__(self, run=None, provider=None, status=None, target_count=None, ready_count=None, failed_count=None, capturing_count=None, pending_count=None, targets=None, screenshots=None, local_vars_configuration=None):  # noqa: E501
        """DevicePreviewProviderProgressDto - 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._run = None
        self._provider = None
        self._status = None
        self._target_count = None
        self._ready_count = None
        self._failed_count = None
        self._capturing_count = None
        self._pending_count = None
        self._targets = None
        self._screenshots = None
        self.discriminator = None

        self.run = run
        self.provider = provider
        self.status = status
        self.target_count = target_count
        self.ready_count = ready_count
        self.failed_count = failed_count
        self.capturing_count = capturing_count
        self.pending_count = pending_count
        self.targets = targets
        self.screenshots = screenshots

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


        :return: The run of this DevicePreviewProviderProgressDto.  # noqa: E501
        :rtype: DevicePreviewRunDto
        """
        return self._run

    @run.setter
    def run(self, run):
        """Sets the run of this DevicePreviewProviderProgressDto.


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

        self._run = run

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


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

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


        :param provider: The provider of this DevicePreviewProviderProgressDto.  # noqa: E501
        :type: str
        """
        if self.local_vars_configuration.client_side_validation and provider is None:  # noqa: E501
            raise ValueError("Invalid value for `provider`, must not be `None`")  # noqa: E501
        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 status(self):
        """Gets the status of this DevicePreviewProviderProgressDto.  # noqa: E501


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

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


        :param status: The status of this DevicePreviewProviderProgressDto.  # 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 = ["PENDING", "CAPTURING", "PARTIAL_COMPLETE", "COMPLETE", "FAILED"]  # 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 target_count(self):
        """Gets the target_count of this DevicePreviewProviderProgressDto.  # noqa: E501


        :return: The target_count of this DevicePreviewProviderProgressDto.  # noqa: E501
        :rtype: int
        """
        return self._target_count

    @target_count.setter
    def target_count(self, target_count):
        """Sets the target_count of this DevicePreviewProviderProgressDto.


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

        self._target_count = target_count

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


        :return: The ready_count of this DevicePreviewProviderProgressDto.  # noqa: E501
        :rtype: int
        """
        return self._ready_count

    @ready_count.setter
    def ready_count(self, ready_count):
        """Sets the ready_count of this DevicePreviewProviderProgressDto.


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

        self._ready_count = ready_count

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


        :return: The failed_count of this DevicePreviewProviderProgressDto.  # noqa: E501
        :rtype: int
        """
        return self._failed_count

    @failed_count.setter
    def failed_count(self, failed_count):
        """Sets the failed_count of this DevicePreviewProviderProgressDto.


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

        self._failed_count = failed_count

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


        :return: The capturing_count of this DevicePreviewProviderProgressDto.  # noqa: E501
        :rtype: int
        """
        return self._capturing_count

    @capturing_count.setter
    def capturing_count(self, capturing_count):
        """Sets the capturing_count of this DevicePreviewProviderProgressDto.


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

        self._capturing_count = capturing_count

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


        :return: The pending_count of this DevicePreviewProviderProgressDto.  # noqa: E501
        :rtype: int
        """
        return self._pending_count

    @pending_count.setter
    def pending_count(self, pending_count):
        """Sets the pending_count of this DevicePreviewProviderProgressDto.


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

        self._pending_count = pending_count

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


        :return: The targets of this DevicePreviewProviderProgressDto.  # noqa: E501
        :rtype: list[DevicePreviewTargetDto]
        """
        return self._targets

    @targets.setter
    def targets(self, targets):
        """Sets the targets of this DevicePreviewProviderProgressDto.


        :param targets: The targets of this DevicePreviewProviderProgressDto.  # noqa: E501
        :type: list[DevicePreviewTargetDto]
        """
        if self.local_vars_configuration.client_side_validation and targets is None:  # noqa: E501
            raise ValueError("Invalid value for `targets`, must not be `None`")  # noqa: E501

        self._targets = targets

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


        :return: The screenshots of this DevicePreviewProviderProgressDto.  # noqa: E501
        :rtype: list[DevicePreviewScreenshotDto]
        """
        return self._screenshots

    @screenshots.setter
    def screenshots(self, screenshots):
        """Sets the screenshots of this DevicePreviewProviderProgressDto.


        :param screenshots: The screenshots of this DevicePreviewProviderProgressDto.  # noqa: E501
        :type: list[DevicePreviewScreenshotDto]
        """
        if self.local_vars_configuration.client_side_validation and screenshots is None:  # noqa: E501
            raise ValueError("Invalid value for `screenshots`, must not be `None`")  # noqa: E501

        self._screenshots = screenshots

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

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