# coding: utf-8

"""
    Selling Partner API for Services

    With the Services API, you can build applications that help service providers get and modify their service orders and manage their resources.

    The version of the OpenAPI document: v1
    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 SetAppointmentFulfillmentDataRequest(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 = {
        'estimated_arrival_time': 'DateTimeRange',
        'fulfillment_time': 'FulfillmentTime',
        'appointment_resources': 'List[AppointmentResource]',
        'fulfillment_documents': 'List[FulfillmentDocument]',
    }

    attribute_map = {
        'estimated_arrival_time': 'estimatedArrivalTime',
        'fulfillment_time': 'fulfillmentTime',
        'appointment_resources': 'appointmentResources',
        'fulfillment_documents': 'fulfillmentDocuments',
    }

    def __init__(self, estimated_arrival_time=None, fulfillment_time=None, appointment_resources=None, fulfillment_documents=None, _configuration=None):  # noqa: E501
        """SetAppointmentFulfillmentDataRequest - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._estimated_arrival_time = None
        self._fulfillment_time = None
        self._appointment_resources = None
        self._fulfillment_documents = None
        self.discriminator = None

        if estimated_arrival_time is not None:
            self.estimated_arrival_time = estimated_arrival_time
        if fulfillment_time is not None:
            self.fulfillment_time = fulfillment_time
        if appointment_resources is not None:
            self.appointment_resources = appointment_resources
        if fulfillment_documents is not None:
            self.fulfillment_documents = fulfillment_documents

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


        :return: The estimated_arrival_time of this SetAppointmentFulfillmentDataRequest.  # noqa: E501
        :rtype: DateTimeRange
        """
        return self._estimated_arrival_time

    @estimated_arrival_time.setter
    def estimated_arrival_time(self, estimated_arrival_time):
        """Sets the estimated_arrival_time of this SetAppointmentFulfillmentDataRequest.


        :param estimated_arrival_time: The estimated_arrival_time of this SetAppointmentFulfillmentDataRequest.  # noqa: E501
        :type: DateTimeRange
        """

        self._estimated_arrival_time = estimated_arrival_time

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


        :return: The fulfillment_time of this SetAppointmentFulfillmentDataRequest.  # noqa: E501
        :rtype: FulfillmentTime
        """
        return self._fulfillment_time

    @fulfillment_time.setter
    def fulfillment_time(self, fulfillment_time):
        """Sets the fulfillment_time of this SetAppointmentFulfillmentDataRequest.


        :param fulfillment_time: The fulfillment_time of this SetAppointmentFulfillmentDataRequest.  # noqa: E501
        :type: FulfillmentTime
        """

        self._fulfillment_time = fulfillment_time

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

        List of resources that performs or performed job appointment fulfillment.  # noqa: E501

        :return: The appointment_resources of this SetAppointmentFulfillmentDataRequest.  # noqa: E501
        :rtype: List[AppointmentResource]
        """
        return self._appointment_resources

    @appointment_resources.setter
    def appointment_resources(self, appointment_resources):
        """Sets the appointment_resources of this SetAppointmentFulfillmentDataRequest.

        List of resources that performs or performed job appointment fulfillment.  # noqa: E501

        :param appointment_resources: The appointment_resources of this SetAppointmentFulfillmentDataRequest.  # noqa: E501
        :type: List[AppointmentResource]
        """

        self._appointment_resources = appointment_resources

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

        List of documents captured during service appointment fulfillment.  # noqa: E501

        :return: The fulfillment_documents of this SetAppointmentFulfillmentDataRequest.  # noqa: E501
        :rtype: List[FulfillmentDocument]
        """
        return self._fulfillment_documents

    @fulfillment_documents.setter
    def fulfillment_documents(self, fulfillment_documents):
        """Sets the fulfillment_documents of this SetAppointmentFulfillmentDataRequest.

        List of documents captured during service appointment fulfillment.  # noqa: E501

        :param fulfillment_documents: The fulfillment_documents of this SetAppointmentFulfillmentDataRequest.  # noqa: E501
        :type: List[FulfillmentDocument]
        """

        self._fulfillment_documents = fulfillment_documents

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

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