# coding: utf-8

"""
Copyright 2016 SmartBear Software

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

    Ref: https://github.com/swagger-api/swagger-codegen
"""

from pprint import pformat
from six import iteritems


class RequestProvidersSearch(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self):
        """
        RequestProvidersSearch - a model defined in Swagger

        :param dict swaggerTypes: The key is attribute name
                                  and the value is attribute type.
        :param dict attributeMap: The key is attribute name
                                  and the value is json key in definition.
        """
        self.swagger_types = {
            'accepts_insurance': 'bool',
            'hios_ids': 'list[str]',
            'page': 'int',
            'per_page': 'int',
            'radius': 'int',
            'search_term': 'str',
            'zip_code': 'str',
            'type': 'str'
        }

        self.attribute_map = {
            'accepts_insurance': 'accepts_insurance',
            'hios_ids': 'hios_ids',
            'page': 'page',
            'per_page': 'per_page',
            'radius': 'radius',
            'search_term': 'search_term',
            'zip_code': 'zip_code',
            'type': 'type'
        }

        self._accepts_insurance = None
        self._hios_ids = None
        self._page = None
        self._per_page = None
        self._radius = None
        self._search_term = None
        self._zip_code = None
        self._type = None

    @property
    def accepts_insurance(self):
        """
        Gets the accepts_insurance of this RequestProvidersSearch.
        Limit results to Providers who accept at least one insurance
        plan.  Note that the inverse of this filter is not supported and
        any value will evaluate to true

        :return: The accepts_insurance of this RequestProvidersSearch.
        :rtype: bool
        """
        return self._accepts_insurance

    @accepts_insurance.setter
    def accepts_insurance(self, accepts_insurance):
        """
        Sets the accepts_insurance of this RequestProvidersSearch.
        Limit results to Providers who accept at least one insurance
        plan.  Note that the inverse of this filter is not supported and
        any value will evaluate to true

        :param accepts_insurance: The accepts_insurance of this RequestProvidersSearch.
        :type: bool
        """
        self._accepts_insurance = accepts_insurance

    @property
    def hios_ids(self):
        """
        Gets the hios_ids of this RequestProvidersSearch.
        List of HIOS ids

        :return: The hios_ids of this RequestProvidersSearch.
        :rtype: list[str]
        """
        return self._hios_ids

    @hios_ids.setter
    def hios_ids(self, hios_ids):
        """
        Sets the hios_ids of this RequestProvidersSearch.
        List of HIOS ids

        :param hios_ids: The hios_ids of this RequestProvidersSearch.
        :type: list[str]
        """
        self._hios_ids = hios_ids

    @property
    def page(self):
        """
        Gets the page of this RequestProvidersSearch.
        Page number

        :return: The page of this RequestProvidersSearch.
        :rtype: int
        """
        return self._page

    @page.setter
    def page(self, page):
        """
        Sets the page of this RequestProvidersSearch.
        Page number

        :param page: The page of this RequestProvidersSearch.
        :type: int
        """
        self._page = page

    @property
    def per_page(self):
        """
        Gets the per_page of this RequestProvidersSearch.
        Number of records to return per page

        :return: The per_page of this RequestProvidersSearch.
        :rtype: int
        """
        return self._per_page

    @per_page.setter
    def per_page(self, per_page):
        """
        Sets the per_page of this RequestProvidersSearch.
        Number of records to return per page

        :param per_page: The per_page of this RequestProvidersSearch.
        :type: int
        """
        self._per_page = per_page

    @property
    def radius(self):
        """
        Gets the radius of this RequestProvidersSearch.
        Radius (in miles) to use to limit results

        :return: The radius of this RequestProvidersSearch.
        :rtype: int
        """
        return self._radius

    @radius.setter
    def radius(self, radius):
        """
        Sets the radius of this RequestProvidersSearch.
        Radius (in miles) to use to limit results

        :param radius: The radius of this RequestProvidersSearch.
        :type: int
        """
        self._radius = radius

    @property
    def search_term(self):
        """
        Gets the search_term of this RequestProvidersSearch.
        String to search by

        :return: The search_term of this RequestProvidersSearch.
        :rtype: str
        """
        return self._search_term

    @search_term.setter
    def search_term(self, search_term):
        """
        Sets the search_term of this RequestProvidersSearch.
        String to search by

        :param search_term: The search_term of this RequestProvidersSearch.
        :type: str
        """
        self._search_term = search_term

    @property
    def zip_code(self):
        """
        Gets the zip_code of this RequestProvidersSearch.
        Zip Code to search near

        :return: The zip_code of this RequestProvidersSearch.
        :rtype: str
        """
        return self._zip_code

    @zip_code.setter
    def zip_code(self, zip_code):
        """
        Sets the zip_code of this RequestProvidersSearch.
        Zip Code to search near

        :param zip_code: The zip_code of this RequestProvidersSearch.
        :type: str
        """
        self._zip_code = zip_code

    @property
    def type(self):
        """
        Gets the type of this RequestProvidersSearch.
        Either organization or individual

        :return: The type of this RequestProvidersSearch.
        :rtype: str
        """
        return self._type

    @type.setter
    def type(self, type):
        """
        Sets the type of this RequestProvidersSearch.
        Either organization or individual

        :param type: The type of this RequestProvidersSearch.
        :type: str
        """
        self._type = type

    def to_dict(self):
        """
        Returns the model properties as a dict
        """
        result = {}

        for attr, _ in iteritems(self.swagger_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 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
        """
        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """
        Returns true if both objects are not equal
        """
        return not self == other

