# coding: utf-8

"""
    Inventory API

    The Inventory API is used to create and manage inventory, and then to publish and manage this inventory on an eBay marketplace. There are also methods in this API that will convert eligible, active eBay listings into the Inventory API model.  # noqa: E501

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

import pprint
import re  # noqa: F401

import six

class ProductFamilyProperties(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 = {
        'engine': 'str',
        'make': 'str',
        'model': 'str',
        'trim': 'str',
        'year': 'str'
    }

    attribute_map = {
        'engine': 'engine',
        'make': 'make',
        'model': 'model',
        'trim': 'trim',
        'year': 'year'
    }

    def __init__(self, engine=None, make=None, model=None, trim=None, year=None):  # noqa: E501
        """ProductFamilyProperties - a model defined in Swagger"""  # noqa: E501
        self._engine = None
        self._make = None
        self._model = None
        self._trim = None
        self._year = None
        self.discriminator = None
        if engine is not None:
            self.engine = engine
        if make is not None:
            self.make = make
        if model is not None:
            self.model = model
        if trim is not None:
            self.trim = trim
        if year is not None:
            self.year = year

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

        This field indicates the specifications of the engine, including its size, block type, and fuel type. An example is <code>2.7L V6 gas DOHC naturally aspirated</code>. This field is conditionally required, but should be supplied if known/applicable.  # noqa: E501

        :return: The engine of this ProductFamilyProperties.  # noqa: E501
        :rtype: str
        """
        return self._engine

    @engine.setter
    def engine(self, engine):
        """Sets the engine of this ProductFamilyProperties.

        This field indicates the specifications of the engine, including its size, block type, and fuel type. An example is <code>2.7L V6 gas DOHC naturally aspirated</code>. This field is conditionally required, but should be supplied if known/applicable.  # noqa: E501

        :param engine: The engine of this ProductFamilyProperties.  # noqa: E501
        :type: str
        """

        self._engine = engine

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

        This field indicates the make of the vehicle (e.g. <code>Toyota</code>). This field is always required to identify a motor vehicle.  # noqa: E501

        :return: The make of this ProductFamilyProperties.  # noqa: E501
        :rtype: str
        """
        return self._make

    @make.setter
    def make(self, make):
        """Sets the make of this ProductFamilyProperties.

        This field indicates the make of the vehicle (e.g. <code>Toyota</code>). This field is always required to identify a motor vehicle.  # noqa: E501

        :param make: The make of this ProductFamilyProperties.  # noqa: E501
        :type: str
        """

        self._make = make

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

        This field indicates the model of the vehicle (e.g. <code>Camry</code>). This field is always required to identify a motor vehicle.  # noqa: E501

        :return: The model of this ProductFamilyProperties.  # noqa: E501
        :rtype: str
        """
        return self._model

    @model.setter
    def model(self, model):
        """Sets the model of this ProductFamilyProperties.

        This field indicates the model of the vehicle (e.g. <code>Camry</code>). This field is always required to identify a motor vehicle.  # noqa: E501

        :param model: The model of this ProductFamilyProperties.  # noqa: E501
        :type: str
        """

        self._model = model

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

        This field indicates the trim of the vehicle (e.g. <code>2-door Coupe</code>). This field is conditionally required, but should be supplied if known/applicable.  # noqa: E501

        :return: The trim of this ProductFamilyProperties.  # noqa: E501
        :rtype: str
        """
        return self._trim

    @trim.setter
    def trim(self, trim):
        """Sets the trim of this ProductFamilyProperties.

        This field indicates the trim of the vehicle (e.g. <code>2-door Coupe</code>). This field is conditionally required, but should be supplied if known/applicable.  # noqa: E501

        :param trim: The trim of this ProductFamilyProperties.  # noqa: E501
        :type: str
        """

        self._trim = trim

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

        This field indicates the year of the vehicle (e.g. <code>2016</code>). This field is always required to identify a motor vehicle.  # noqa: E501

        :return: The year of this ProductFamilyProperties.  # noqa: E501
        :rtype: str
        """
        return self._year

    @year.setter
    def year(self, year):
        """Sets the year of this ProductFamilyProperties.

        This field indicates the year of the vehicle (e.g. <code>2016</code>). This field is always required to identify a motor vehicle.  # noqa: E501

        :param year: The year of this ProductFamilyProperties.  # noqa: E501
        :type: str
        """

        self._year = year

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

        return self.__dict__ == other.__dict__

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