# coding: utf-8

"""
    Getir-Locals Integration Swagger Documentation

    This documentation is created by Getir Developers for Getir-Locals Integration.For this integration, you need to take CLIENT NAME and CLIENT SECRET keys from Getir-dev team and use these keys for authentication. You also need to use access token provided after successful login to be able to use all other endpoints  You can view information about the active order through /orders/unapproved endpoints. The status of the order is managed via verify, prepare, handover and cancel endpoints. Details on order management are as follows:  For orders to be made by the Getir courier, the flow is as follows:  Supplier confirms order --verify<br />Supplier prepares order --prepare (1-2 minutes must pass before delivery)<br />Supplier hands over the order to Getir courier --handover<br />For Getir delivery, transactions are made by the Getir courier after handover.  A valid reason will be requested from the supplier to cancel an order. Valid reasons may vary depending on the instant status of the order. For this reason, before canceling an order, you have to get instant valid order cancellation reasons from /orders/{orderId}/cancel-options endpoint.   # noqa: E501

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

import pprint
import re  # noqa: F401

import six

class ProductResponse(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 = {
        'id': 'str',
        'product': 'str',
        'catalog_product_id': 'str',
        'count': 'int',
        'name': 'NameResponse',
        'price': 'float',
        'total_price': 'float',
        'has_barcode': 'bool',
        'barcode': 'str',
        'note': 'str',
        'max_possible_price': 'float',
        'min_possible_price': 'float',
        'is_provision_available': 'bool',
        'max_total_weight': 'int',
        'min_total_weight': 'int',
        'total_weight': 'int'
    }

    attribute_map = {
        'id': 'id',
        'product': 'product',
        'catalog_product_id': 'catalogProductId',
        'count': 'count',
        'name': 'name',
        'price': 'price',
        'total_price': 'totalPrice',
        'has_barcode': 'hasBarcode',
        'barcode': 'barcode',
        'note': 'note',
        'max_possible_price': 'maxPossiblePrice',
        'min_possible_price': 'minPossiblePrice',
        'is_provision_available': 'isProvisionAvailable',
        'max_total_weight': 'maxTotalWeight',
        'min_total_weight': 'minTotalWeight',
        'total_weight': 'totalWeight'
    }

    def __init__(self, id=None, product=None, catalog_product_id=None, count=None, name=None, price=None, total_price=None, has_barcode=None, barcode=None, note=None, max_possible_price=None, min_possible_price=None, is_provision_available=None, max_total_weight=None, min_total_weight=None, total_weight=None):  # noqa: E501
        """ProductResponse - a model defined in Swagger"""  # noqa: E501
        self._id = None
        self._product = None
        self._catalog_product_id = None
        self._count = None
        self._name = None
        self._price = None
        self._total_price = None
        self._has_barcode = None
        self._barcode = None
        self._note = None
        self._max_possible_price = None
        self._min_possible_price = None
        self._is_provision_available = None
        self._max_total_weight = None
        self._min_total_weight = None
        self._total_weight = None
        self.discriminator = None
        if id is not None:
            self.id = id
        if product is not None:
            self.product = product
        if catalog_product_id is not None:
            self.catalog_product_id = catalog_product_id
        if count is not None:
            self.count = count
        if name is not None:
            self.name = name
        if price is not None:
            self.price = price
        if total_price is not None:
            self.total_price = total_price
        if has_barcode is not None:
            self.has_barcode = has_barcode
        if barcode is not None:
            self.barcode = barcode
        if note is not None:
            self.note = note
        if max_possible_price is not None:
            self.max_possible_price = max_possible_price
        if min_possible_price is not None:
            self.min_possible_price = min_possible_price
        if is_provision_available is not None:
            self.is_provision_available = is_provision_available
        if max_total_weight is not None:
            self.max_total_weight = max_total_weight
        if min_total_weight is not None:
            self.min_total_weight = min_total_weight
        if total_weight is not None:
            self.total_weight = total_weight

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


        :return: The id of this ProductResponse.  # noqa: E501
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this ProductResponse.


        :param id: The id of this ProductResponse.  # noqa: E501
        :type: str
        """

        self._id = id

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


        :return: The product of this ProductResponse.  # noqa: E501
        :rtype: str
        """
        return self._product

    @product.setter
    def product(self, product):
        """Sets the product of this ProductResponse.


        :param product: The product of this ProductResponse.  # noqa: E501
        :type: str
        """

        self._product = product

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


        :return: The catalog_product_id of this ProductResponse.  # noqa: E501
        :rtype: str
        """
        return self._catalog_product_id

    @catalog_product_id.setter
    def catalog_product_id(self, catalog_product_id):
        """Sets the catalog_product_id of this ProductResponse.


        :param catalog_product_id: The catalog_product_id of this ProductResponse.  # noqa: E501
        :type: str
        """

        self._catalog_product_id = catalog_product_id

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


        :return: The count of this ProductResponse.  # noqa: E501
        :rtype: int
        """
        return self._count

    @count.setter
    def count(self, count):
        """Sets the count of this ProductResponse.


        :param count: The count of this ProductResponse.  # noqa: E501
        :type: int
        """

        self._count = count

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


        :return: The name of this ProductResponse.  # noqa: E501
        :rtype: NameResponse
        """
        return self._name

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


        :param name: The name of this ProductResponse.  # noqa: E501
        :type: NameResponse
        """

        self._name = name

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


        :return: The price of this ProductResponse.  # noqa: E501
        :rtype: float
        """
        return self._price

    @price.setter
    def price(self, price):
        """Sets the price of this ProductResponse.


        :param price: The price of this ProductResponse.  # noqa: E501
        :type: float
        """

        self._price = price

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


        :return: The total_price of this ProductResponse.  # noqa: E501
        :rtype: float
        """
        return self._total_price

    @total_price.setter
    def total_price(self, total_price):
        """Sets the total_price of this ProductResponse.


        :param total_price: The total_price of this ProductResponse.  # noqa: E501
        :type: float
        """

        self._total_price = total_price

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


        :return: The has_barcode of this ProductResponse.  # noqa: E501
        :rtype: bool
        """
        return self._has_barcode

    @has_barcode.setter
    def has_barcode(self, has_barcode):
        """Sets the has_barcode of this ProductResponse.


        :param has_barcode: The has_barcode of this ProductResponse.  # noqa: E501
        :type: bool
        """

        self._has_barcode = has_barcode

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


        :return: The barcode of this ProductResponse.  # noqa: E501
        :rtype: str
        """
        return self._barcode

    @barcode.setter
    def barcode(self, barcode):
        """Sets the barcode of this ProductResponse.


        :param barcode: The barcode of this ProductResponse.  # noqa: E501
        :type: str
        """

        self._barcode = barcode

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


        :return: The note of this ProductResponse.  # noqa: E501
        :rtype: str
        """
        return self._note

    @note.setter
    def note(self, note):
        """Sets the note of this ProductResponse.


        :param note: The note of this ProductResponse.  # noqa: E501
        :type: str
        """

        self._note = note

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


        :return: The max_possible_price of this ProductResponse.  # noqa: E501
        :rtype: float
        """
        return self._max_possible_price

    @max_possible_price.setter
    def max_possible_price(self, max_possible_price):
        """Sets the max_possible_price of this ProductResponse.


        :param max_possible_price: The max_possible_price of this ProductResponse.  # noqa: E501
        :type: float
        """

        self._max_possible_price = max_possible_price

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


        :return: The min_possible_price of this ProductResponse.  # noqa: E501
        :rtype: float
        """
        return self._min_possible_price

    @min_possible_price.setter
    def min_possible_price(self, min_possible_price):
        """Sets the min_possible_price of this ProductResponse.


        :param min_possible_price: The min_possible_price of this ProductResponse.  # noqa: E501
        :type: float
        """

        self._min_possible_price = min_possible_price

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


        :return: The is_provision_available of this ProductResponse.  # noqa: E501
        :rtype: bool
        """
        return self._is_provision_available

    @is_provision_available.setter
    def is_provision_available(self, is_provision_available):
        """Sets the is_provision_available of this ProductResponse.


        :param is_provision_available: The is_provision_available of this ProductResponse.  # noqa: E501
        :type: bool
        """

        self._is_provision_available = is_provision_available

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


        :return: The max_total_weight of this ProductResponse.  # noqa: E501
        :rtype: int
        """
        return self._max_total_weight

    @max_total_weight.setter
    def max_total_weight(self, max_total_weight):
        """Sets the max_total_weight of this ProductResponse.


        :param max_total_weight: The max_total_weight of this ProductResponse.  # noqa: E501
        :type: int
        """

        self._max_total_weight = max_total_weight

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


        :return: The min_total_weight of this ProductResponse.  # noqa: E501
        :rtype: int
        """
        return self._min_total_weight

    @min_total_weight.setter
    def min_total_weight(self, min_total_weight):
        """Sets the min_total_weight of this ProductResponse.


        :param min_total_weight: The min_total_weight of this ProductResponse.  # noqa: E501
        :type: int
        """

        self._min_total_weight = min_total_weight

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


        :return: The total_weight of this ProductResponse.  # noqa: E501
        :rtype: int
        """
        return self._total_weight

    @total_weight.setter
    def total_weight(self, total_weight):
        """Sets the total_weight of this ProductResponse.


        :param total_weight: The total_weight of this ProductResponse.  # noqa: E501
        :type: int
        """

        self._total_weight = total_weight

    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(ProductResponse, 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, ProductResponse):
            return False

        return self.__dict__ == other.__dict__

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