# coding: utf-8

"""
    Amazon Shipping API

    The Amazon Shipping API is designed to support outbound shipping use cases both for orders originating on Amazon-owned marketplaces as well as external channels/marketplaces. With these APIs, you can request shipping rates, create shipments, cancel shipments, and track shipments.

    The version of the OpenAPI document: v2
    Contact: swa-api-core@amazon.com
    Generated by OpenAPI Generator (https://openapi-generator.tech)

    Do not edit the class manually.
"""  # noqa: E501


import pprint
import re  # noqa: F401

import six

from spapi.configuration import Configuration


class AccessPoint(object):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """

    """
    Attributes:
      swagger_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.
    """
    swagger_types = {
        'access_point_id': 'str',
        'name': 'str',
        'timezone': 'str',
        'type': 'AccessPointType',
        'accessibility_attributes': 'AccessibilityAttributes',
        'address': 'Address',
        'exception_operating_hours': 'List[ExceptionOperatingHours]',
        'assistance_type': 'str',
        'score': 'str',
        'standard_operating_hours': 'Dict[str, OperatingHours]',
    }

    attribute_map = {
        'access_point_id': 'accessPointId',
        'name': 'name',
        'timezone': 'timezone',
        'type': 'type',
        'accessibility_attributes': 'accessibilityAttributes',
        'address': 'address',
        'exception_operating_hours': 'exceptionOperatingHours',
        'assistance_type': 'assistanceType',
        'score': 'score',
        'standard_operating_hours': 'standardOperatingHours',
    }

    def __init__(self, access_point_id=None, name=None, timezone=None, type=None, accessibility_attributes=None, address=None, exception_operating_hours=None, assistance_type=None, score=None, standard_operating_hours=None, _configuration=None):  # noqa: E501
        """AccessPoint - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._access_point_id = None
        self._name = None
        self._timezone = None
        self._type = None
        self._accessibility_attributes = None
        self._address = None
        self._exception_operating_hours = None
        self._assistance_type = None
        self._score = None
        self._standard_operating_hours = None
        self.discriminator = None

        if access_point_id is not None:
            self.access_point_id = access_point_id
        if name is not None:
            self.name = name
        if timezone is not None:
            self.timezone = timezone
        if type is not None:
            self.type = type
        if accessibility_attributes is not None:
            self.accessibility_attributes = accessibility_attributes
        if address is not None:
            self.address = address
        if exception_operating_hours is not None:
            self.exception_operating_hours = exception_operating_hours
        if assistance_type is not None:
            self.assistance_type = assistance_type
        if score is not None:
            self.score = score
        if standard_operating_hours is not None:
            self.standard_operating_hours = standard_operating_hours

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

        Unique identifier for the access point  # noqa: E501

        :return: The access_point_id of this AccessPoint.  # noqa: E501
        :rtype: str
        """
        return self._access_point_id

    @access_point_id.setter
    def access_point_id(self, access_point_id):
        """Sets the access_point_id of this AccessPoint.

        Unique identifier for the access point  # noqa: E501

        :param access_point_id: The access_point_id of this AccessPoint.  # noqa: E501
        :type: str
        """

        self._access_point_id = access_point_id

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

        Name of entity (store/hub etc) where this access point is located  # noqa: E501

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

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

        Name of entity (store/hub etc) where this access point is located  # noqa: E501

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

        self._name = name

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

        Timezone of access point  # noqa: E501

        :return: The timezone of this AccessPoint.  # noqa: E501
        :rtype: str
        """
        return self._timezone

    @timezone.setter
    def timezone(self, timezone):
        """Sets the timezone of this AccessPoint.

        Timezone of access point  # noqa: E501

        :param timezone: The timezone of this AccessPoint.  # noqa: E501
        :type: str
        """

        self._timezone = timezone

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


        :return: The type of this AccessPoint.  # noqa: E501
        :rtype: AccessPointType
        """
        return self._type

    @type.setter
    def type(self, type):
        """Sets the type of this AccessPoint.


        :param type: The type of this AccessPoint.  # noqa: E501
        :type: AccessPointType
        """

        self._type = type

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


        :return: The accessibility_attributes of this AccessPoint.  # noqa: E501
        :rtype: AccessibilityAttributes
        """
        return self._accessibility_attributes

    @accessibility_attributes.setter
    def accessibility_attributes(self, accessibility_attributes):
        """Sets the accessibility_attributes of this AccessPoint.


        :param accessibility_attributes: The accessibility_attributes of this AccessPoint.  # noqa: E501
        :type: AccessibilityAttributes
        """

        self._accessibility_attributes = accessibility_attributes

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


        :return: The address of this AccessPoint.  # noqa: E501
        :rtype: Address
        """
        return self._address

    @address.setter
    def address(self, address):
        """Sets the address of this AccessPoint.


        :param address: The address of this AccessPoint.  # noqa: E501
        :type: Address
        """

        self._address = address

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

        Exception operating hours for Access Point  # noqa: E501

        :return: The exception_operating_hours of this AccessPoint.  # noqa: E501
        :rtype: List[ExceptionOperatingHours]
        """
        return self._exception_operating_hours

    @exception_operating_hours.setter
    def exception_operating_hours(self, exception_operating_hours):
        """Sets the exception_operating_hours of this AccessPoint.

        Exception operating hours for Access Point  # noqa: E501

        :param exception_operating_hours: The exception_operating_hours of this AccessPoint.  # noqa: E501
        :type: List[ExceptionOperatingHours]
        """

        self._exception_operating_hours = exception_operating_hours

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

        Assistance type enum for Access point i.e. STAFF_ASSISTED or SELF_ASSISTED  # noqa: E501

        :return: The assistance_type of this AccessPoint.  # noqa: E501
        :rtype: str
        """
        return self._assistance_type

    @assistance_type.setter
    def assistance_type(self, assistance_type):
        """Sets the assistance_type of this AccessPoint.

        Assistance type enum for Access point i.e. STAFF_ASSISTED or SELF_ASSISTED  # noqa: E501

        :param assistance_type: The assistance_type of this AccessPoint.  # noqa: E501
        :type: str
        """
        allowed_values = ["STAFF_ASSISTED", "SELF_ASSISTED"]  # noqa: E501
        if (self._configuration.client_side_validation and
                assistance_type not in allowed_values):
            raise ValueError(
                "Invalid value for `assistance_type` ({0}), must be one of {1}"  # noqa: E501
                .format(assistance_type, allowed_values)
            )

        self._assistance_type = assistance_type

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

        The score of access point, based on proximity to postal code and sorting preference. This can be used to sort access point results on shipper's end.  # noqa: E501

        :return: The score of this AccessPoint.  # noqa: E501
        :rtype: str
        """
        return self._score

    @score.setter
    def score(self, score):
        """Sets the score of this AccessPoint.

        The score of access point, based on proximity to postal code and sorting preference. This can be used to sort access point results on shipper's end.  # noqa: E501

        :param score: The score of this AccessPoint.  # noqa: E501
        :type: str
        """

        self._score = score

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

        Map of day of the week to operating hours of that day  # noqa: E501

        :return: The standard_operating_hours of this AccessPoint.  # noqa: E501
        :rtype: Dict[str, OperatingHours]
        """
        return self._standard_operating_hours

    @standard_operating_hours.setter
    def standard_operating_hours(self, standard_operating_hours):
        """Sets the standard_operating_hours of this AccessPoint.

        Map of day of the week to operating hours of that day  # noqa: E501

        :param standard_operating_hours: The standard_operating_hours of this AccessPoint.  # noqa: E501
        :type: Dict[str, OperatingHours]
        """

        self._standard_operating_hours = standard_operating_hours

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

        for attr, _ in six.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
        if issubclass(AccessPoint, dict):
            for key, value in self.items():
                result[key] = 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, AccessPoint):
            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, AccessPoint):
            return True

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