# 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 SearchAvailablePhoneNumbersOptions(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 = {
        'phone_country': 'str',
        'phone_variant': 'str',
        'quality_filter': 'str',
        'line_type': 'str',
        'carrier_name': 'str',
        'mobile_country_code': 'str',
        'mobile_network_code': 'str',
        'provider_labels': 'list[str]',
        'limit': 'int'
    }

    attribute_map = {
        'phone_country': 'phoneCountry',
        'phone_variant': 'phoneVariant',
        'quality_filter': 'qualityFilter',
        'line_type': 'lineType',
        'carrier_name': 'carrierName',
        'mobile_country_code': 'mobileCountryCode',
        'mobile_network_code': 'mobileNetworkCode',
        'provider_labels': 'providerLabels',
        'limit': 'limit'
    }

    def __init__(self, phone_country=None, phone_variant=None, quality_filter=None, line_type=None, carrier_name=None, mobile_country_code=None, mobile_network_code=None, provider_labels=None, limit=None, local_vars_configuration=None):  # noqa: E501
        """SearchAvailablePhoneNumbersOptions - 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._phone_country = None
        self._phone_variant = None
        self._quality_filter = None
        self._line_type = None
        self._carrier_name = None
        self._mobile_country_code = None
        self._mobile_network_code = None
        self._provider_labels = None
        self._limit = None
        self.discriminator = None

        self.phone_country = phone_country
        self.phone_variant = phone_variant
        self.quality_filter = quality_filter
        self.line_type = line_type
        self.carrier_name = carrier_name
        self.mobile_country_code = mobile_country_code
        self.mobile_network_code = mobile_network_code
        self.provider_labels = provider_labels
        self.limit = limit

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


        :return: The phone_country of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :rtype: str
        """
        return self._phone_country

    @phone_country.setter
    def phone_country(self, phone_country):
        """Sets the phone_country of this SearchAvailablePhoneNumbersOptions.


        :param phone_country: The phone_country of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :type: str
        """
        if self.local_vars_configuration.client_side_validation and phone_country is None:  # noqa: E501
            raise ValueError("Invalid value for `phone_country`, must not be `None`")  # noqa: E501
        allowed_values = ["US", "GB", "AU", "CA", "EE", "HK", "PL", "PT", "NL", "IL", "FI", "SE"]  # noqa: E501
        if self.local_vars_configuration.client_side_validation and phone_country not in allowed_values:  # noqa: E501
            raise ValueError(
                "Invalid value for `phone_country` ({0}), must be one of {1}"  # noqa: E501
                .format(phone_country, allowed_values)
            )

        self._phone_country = phone_country

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


        :return: The phone_variant of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :rtype: str
        """
        return self._phone_variant

    @phone_variant.setter
    def phone_variant(self, phone_variant):
        """Sets the phone_variant of this SearchAvailablePhoneNumbersOptions.


        :param phone_variant: The phone_variant of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :type: str
        """
        allowed_values = [None,"LOCAL", "MOBILE", "TOLL_FREE"]  # noqa: E501
        if self.local_vars_configuration.client_side_validation and phone_variant not in allowed_values:  # noqa: E501
            raise ValueError(
                "Invalid value for `phone_variant` ({0}), must be one of {1}"  # noqa: E501
                .format(phone_variant, allowed_values)
            )

        self._phone_variant = phone_variant

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

        Quality filter for advanced phone provisioning search  # noqa: E501

        :return: The quality_filter of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :rtype: str
        """
        return self._quality_filter

    @quality_filter.setter
    def quality_filter(self, quality_filter):
        """Sets the quality_filter of this SearchAvailablePhoneNumbersOptions.

        Quality filter for advanced phone provisioning search  # noqa: E501

        :param quality_filter: The quality_filter of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :type: str
        """
        allowed_values = [None,"OTP", "NON_VOIP", "MOBILE_ONLY", "ANY"]  # noqa: E501
        if self.local_vars_configuration.client_side_validation and quality_filter not in allowed_values:  # noqa: E501
            raise ValueError(
                "Invalid value for `quality_filter` ({0}), must be one of {1}"  # noqa: E501
                .format(quality_filter, allowed_values)
            )

        self._quality_filter = quality_filter

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


        :return: The line_type of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :rtype: str
        """
        return self._line_type

    @line_type.setter
    def line_type(self, line_type):
        """Sets the line_type of this SearchAvailablePhoneNumbersOptions.


        :param line_type: The line_type of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :type: str
        """

        self._line_type = line_type

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


        :return: The carrier_name of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :rtype: str
        """
        return self._carrier_name

    @carrier_name.setter
    def carrier_name(self, carrier_name):
        """Sets the carrier_name of this SearchAvailablePhoneNumbersOptions.


        :param carrier_name: The carrier_name of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :type: str
        """

        self._carrier_name = carrier_name

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


        :return: The mobile_country_code of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :rtype: str
        """
        return self._mobile_country_code

    @mobile_country_code.setter
    def mobile_country_code(self, mobile_country_code):
        """Sets the mobile_country_code of this SearchAvailablePhoneNumbersOptions.


        :param mobile_country_code: The mobile_country_code of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :type: str
        """

        self._mobile_country_code = mobile_country_code

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


        :return: The mobile_network_code of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :rtype: str
        """
        return self._mobile_network_code

    @mobile_network_code.setter
    def mobile_network_code(self, mobile_network_code):
        """Sets the mobile_network_code of this SearchAvailablePhoneNumbersOptions.


        :param mobile_network_code: The mobile_network_code of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :type: str
        """

        self._mobile_network_code = mobile_network_code

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


        :return: The provider_labels of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :rtype: list[str]
        """
        return self._provider_labels

    @provider_labels.setter
    def provider_labels(self, provider_labels):
        """Sets the provider_labels of this SearchAvailablePhoneNumbersOptions.


        :param provider_labels: The provider_labels of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :type: list[str]
        """

        self._provider_labels = provider_labels

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


        :return: The limit of this SearchAvailablePhoneNumbersOptions.  # noqa: E501
        :rtype: int
        """
        return self._limit

    @limit.setter
    def limit(self, limit):
        """Sets the limit of this SearchAvailablePhoneNumbersOptions.


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

        self._limit = limit

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

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