# coding: utf-8

"""
    Merchant Locator API

    Find Visa accepting merchants around by geolocation

    OpenAPI spec version: v1
    Contact: 
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


from pprint import pformat
from six import iteritems
import re


class SearchOptions(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self, wildcard=None, match_score=None, max_records=None, proximity=None, match_indicators=None):
        """
        SearchOptions - 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 = {
            'wildcard': 'str',
            'match_score': 'bool',
            'max_records': 'int',
            'proximity': 'str',
            'match_indicators': 'bool'
        }

        self.attribute_map = {
            'wildcard': 'wildcard',
            'match_score': 'matchScore',
            'max_records': 'maxRecords',
            'proximity': 'proximity',
            'match_indicators': 'matchIndicators'
        }

        self._wildcard = wildcard
        self._match_score = match_score
        self._max_records = max_records
        self._proximity = proximity
        self._match_indicators = match_indicators

    @property
    def wildcard(self):
        """
        Gets the wildcard of this SearchOptions.
        Allows user to search on Merchant Name using wildcards

        :return: The wildcard of this SearchOptions.
        :rtype: str
        """
        return self._wildcard

    @wildcard.setter
    def wildcard(self, wildcard):
        """
        Sets the wildcard of this SearchOptions.
        Allows user to search on Merchant Name using wildcards

        :param wildcard: The wildcard of this SearchOptions.
        :type: str
        """
        if wildcard is None:
            raise ValueError("Invalid value for `wildcard`, must not be `None`")

        self._wildcard = wildcard

    @property
    def match_score(self):
        """
        Gets the match_score of this SearchOptions.
        Allows user to define if they would like to see the matchScore and receive the response in order of MatchScore

        :return: The match_score of this SearchOptions.
        :rtype: bool
        """
        return self._match_score

    @match_score.setter
    def match_score(self, match_score):
        """
        Sets the match_score of this SearchOptions.
        Allows user to define if they would like to see the matchScore and receive the response in order of MatchScore

        :param match_score: The match_score of this SearchOptions.
        :type: bool
        """
        if match_score is None:
            raise ValueError("Invalid value for `match_score`, must not be `None`")

        self._match_score = match_score

    @property
    def max_records(self):
        """
        Gets the max_records of this SearchOptions.
        Allows user to define maximum number of records to be sent in the response. If the User doesn’t set the maxRecords the value will be set by default to 25. Note: Response records will be unique and sent in order of highest to lowest Match Score

        :return: The max_records of this SearchOptions.
        :rtype: int
        """
        return self._max_records

    @max_records.setter
    def max_records(self, max_records):
        """
        Sets the max_records of this SearchOptions.
        Allows user to define maximum number of records to be sent in the response. If the User doesn’t set the maxRecords the value will be set by default to 25. Note: Response records will be unique and sent in order of highest to lowest Match Score

        :param max_records: The max_records of this SearchOptions.
        :type: int
        """
        if max_records is None:
            raise ValueError("Invalid value for `max_records`, must not be `None`")

        self._max_records = max_records

    @property
    def proximity(self):
        """
        Gets the proximity of this SearchOptions.
        Allows user to do a proximity search on Merchant Name (upto 1 spaces). Note: Proximity Search cannot be combined with Wildcard. If wildcards are used proximity will be ignored.

        :return: The proximity of this SearchOptions.
        :rtype: str
        """
        return self._proximity

    @proximity.setter
    def proximity(self, proximity):
        """
        Sets the proximity of this SearchOptions.
        Allows user to do a proximity search on Merchant Name (upto 1 spaces). Note: Proximity Search cannot be combined with Wildcard. If wildcards are used proximity will be ignored.

        :param proximity: The proximity of this SearchOptions.
        :type: str
        """
        if proximity is None:
            raise ValueError("Invalid value for `proximity`, must not be `None`")

        self._proximity = proximity

    @property
    def match_indicators(self):
        """
        Gets the match_indicators of this SearchOptions.
        Allows user to define if they would like to see which request attributes found a matching record

        :return: The match_indicators of this SearchOptions.
        :rtype: bool
        """
        return self._match_indicators

    @match_indicators.setter
    def match_indicators(self, match_indicators):
        """
        Sets the match_indicators of this SearchOptions.
        Allows user to define if they would like to see which request attributes found a matching record

        :param match_indicators: The match_indicators of this SearchOptions.
        :type: bool
        """
        if match_indicators is None:
            raise ValueError("Invalid value for `match_indicators`, must not be `None`")

        self._match_indicators = match_indicators

    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
        """
        if not isinstance(other, SearchOptions):
            return False

        return self.__dict__ == other.__dict__

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

# ----------------------------------------------------------------------------------------------------------------------
# © Copyright 2018 Visa. All Rights Reserved.
#
# NOTICE: The software and accompanying information and documentation (together, the “Software”) remain the property of
# and are proprietary to Visa and its suppliers and affiliates. The Software remains protected by intellectual property
# rights and may be covered by U.S. and foreign patents or patent applications. The Software is licensed and not sold.
#
# By accessing the Software you are agreeing to Visa's terms of use (developer.visa.com/terms) and privacy policy
# (developer.visa.com/privacy). In addition, all permissible uses of the Software must be in support of Visa products,
# programs and services provided through the Visa Developer Program (VDP) platform only (developer.visa.com).
# THE SOFTWARE AND ANY ASSOCIATED INFORMATION OR DOCUMENTATION IS PROVIDED ON AN “AS IS,” “AS AVAILABLE,” “WITH ALL
# FAULTS” BASIS WITHOUT WARRANTY OR CONDITION OF ANY KIND. YOUR USE IS AT YOUR OWN RISK.
# ----------------------------------------------------------------------------------------------------------------------