# coding: utf-8

"""
    The Selling Partner API for Automotive.

    The Selling Partner API for Automotive provides programmatic access to information needed by selling partners to provide compatibility information about their listed products.

    The version of the OpenAPI document: 2024-11-01
    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 Vehicle(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 = {
        'make': 'str',
        'model': 'str',
        'variant_name': 'str',
        'body_style': 'str',
        'drive_type': 'str',
        'energy': 'str',
        'engine_output': 'List[EngineOutput]',
        'manufacturing_start_date': 'MonthAndYear',
        'manufacturing_stop_date': 'MonthAndYear',
        'last_processed_date': 'str',
        'status': 'VehicleStatusInCatalog',
        'identifiers': 'List[VehicleIdentifiers]',
    }

    attribute_map = {
        'make': 'make',
        'model': 'model',
        'variant_name': 'variantName',
        'body_style': 'bodyStyle',
        'drive_type': 'driveType',
        'energy': 'energy',
        'engine_output': 'engineOutput',
        'manufacturing_start_date': 'manufacturingStartDate',
        'manufacturing_stop_date': 'manufacturingStopDate',
        'last_processed_date': 'lastProcessedDate',
        'status': 'status',
        'identifiers': 'identifiers',
    }

    def __init__(self, make=None, model=None, variant_name=None, body_style=None, drive_type=None, energy=None, engine_output=None, manufacturing_start_date=None, manufacturing_stop_date=None, last_processed_date=None, status=None, identifiers=None, _configuration=None):  # noqa: E501
        """Vehicle - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._make = None
        self._model = None
        self._variant_name = None
        self._body_style = None
        self._drive_type = None
        self._energy = None
        self._engine_output = None
        self._manufacturing_start_date = None
        self._manufacturing_stop_date = None
        self._last_processed_date = None
        self._status = None
        self._identifiers = None
        self.discriminator = None

        self.make = make
        self.model = model
        if variant_name is not None:
            self.variant_name = variant_name
        if body_style is not None:
            self.body_style = body_style
        if drive_type is not None:
            self.drive_type = drive_type
        if energy is not None:
            self.energy = energy
        if engine_output is not None:
            self.engine_output = engine_output
        if manufacturing_start_date is not None:
            self.manufacturing_start_date = manufacturing_start_date
        if manufacturing_stop_date is not None:
            self.manufacturing_stop_date = manufacturing_stop_date
        if last_processed_date is not None:
            self.last_processed_date = last_processed_date
        if status is not None:
            self.status = status
        self.identifiers = identifiers

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

        Vehicle Brand.  # noqa: E501

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

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

        Vehicle Brand.  # noqa: E501

        :param make: The make of this Vehicle.  # noqa: E501
        :type: str
        """
        if self._configuration.client_side_validation and make is None:
            raise ValueError("Invalid value for `make`, must not be `None`")  # noqa: E501

        self._make = make

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

        Specific model of a vehicle.  # noqa: E501

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

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

        Specific model of a vehicle.  # noqa: E501

        :param model: The model of this Vehicle.  # noqa: E501
        :type: str
        """
        if self._configuration.client_side_validation and model is None:
            raise ValueError("Invalid value for `model`, must not be `None`")  # noqa: E501

        self._model = model

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

        Name of the vehicle variant.  # noqa: E501

        :return: The variant_name of this Vehicle.  # noqa: E501
        :rtype: str
        """
        return self._variant_name

    @variant_name.setter
    def variant_name(self, variant_name):
        """Sets the variant_name of this Vehicle.

        Name of the vehicle variant.  # noqa: E501

        :param variant_name: The variant_name of this Vehicle.  # noqa: E501
        :type: str
        """

        self._variant_name = variant_name

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

        Body style of vehicle (example: Hatchback, Cabriolet).  # noqa: E501

        :return: The body_style of this Vehicle.  # noqa: E501
        :rtype: str
        """
        return self._body_style

    @body_style.setter
    def body_style(self, body_style):
        """Sets the body_style of this Vehicle.

        Body style of vehicle (example: Hatchback, Cabriolet).  # noqa: E501

        :param body_style: The body_style of this Vehicle.  # noqa: E501
        :type: str
        """

        self._body_style = body_style

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

        Drive type of vehicle(example: Rear wheel drive).  # noqa: E501

        :return: The drive_type of this Vehicle.  # noqa: E501
        :rtype: str
        """
        return self._drive_type

    @drive_type.setter
    def drive_type(self, drive_type):
        """Sets the drive_type of this Vehicle.

        Drive type of vehicle(example: Rear wheel drive).  # noqa: E501

        :param drive_type: The drive_type of this Vehicle.  # noqa: E501
        :type: str
        """

        self._drive_type = drive_type

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

        Energy Source for the vehicle(example: Petrol)  # noqa: E501

        :return: The energy of this Vehicle.  # noqa: E501
        :rtype: str
        """
        return self._energy

    @energy.setter
    def energy(self, energy):
        """Sets the energy of this Vehicle.

        Energy Source for the vehicle(example: Petrol)  # noqa: E501

        :param energy: The energy of this Vehicle.  # noqa: E501
        :type: str
        """

        self._energy = energy

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

        Engine output of vehicle.  # noqa: E501

        :return: The engine_output of this Vehicle.  # noqa: E501
        :rtype: List[EngineOutput]
        """
        return self._engine_output

    @engine_output.setter
    def engine_output(self, engine_output):
        """Sets the engine_output of this Vehicle.

        Engine output of vehicle.  # noqa: E501

        :param engine_output: The engine_output of this Vehicle.  # noqa: E501
        :type: List[EngineOutput]
        """
        if (self._configuration.client_side_validation and
                engine_output is not None and len(engine_output) < 1):
            raise ValueError("Invalid value for `engine_output`, number of items must be greater than or equal to `1`")  # noqa: E501

        self._engine_output = engine_output

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


        :return: The manufacturing_start_date of this Vehicle.  # noqa: E501
        :rtype: MonthAndYear
        """
        return self._manufacturing_start_date

    @manufacturing_start_date.setter
    def manufacturing_start_date(self, manufacturing_start_date):
        """Sets the manufacturing_start_date of this Vehicle.


        :param manufacturing_start_date: The manufacturing_start_date of this Vehicle.  # noqa: E501
        :type: MonthAndYear
        """

        self._manufacturing_start_date = manufacturing_start_date

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


        :return: The manufacturing_stop_date of this Vehicle.  # noqa: E501
        :rtype: MonthAndYear
        """
        return self._manufacturing_stop_date

    @manufacturing_stop_date.setter
    def manufacturing_stop_date(self, manufacturing_stop_date):
        """Sets the manufacturing_stop_date of this Vehicle.


        :param manufacturing_stop_date: The manufacturing_stop_date of this Vehicle.  # noqa: E501
        :type: MonthAndYear
        """

        self._manufacturing_stop_date = manufacturing_stop_date

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

        The date on which the vehicle was last updated, in ISO-8601 date/time format.  # noqa: E501

        :return: The last_processed_date of this Vehicle.  # noqa: E501
        :rtype: str
        """
        return self._last_processed_date

    @last_processed_date.setter
    def last_processed_date(self, last_processed_date):
        """Sets the last_processed_date of this Vehicle.

        The date on which the vehicle was last updated, in ISO-8601 date/time format.  # noqa: E501

        :param last_processed_date: The last_processed_date of this Vehicle.  # noqa: E501
        :type: str
        """

        self._last_processed_date = last_processed_date

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


        :return: The status of this Vehicle.  # noqa: E501
        :rtype: VehicleStatusInCatalog
        """
        return self._status

    @status.setter
    def status(self, status):
        """Sets the status of this Vehicle.


        :param status: The status of this Vehicle.  # noqa: E501
        :type: VehicleStatusInCatalog
        """

        self._status = status

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

        Identifiers that can be used to identify the vehicle uniquely  # noqa: E501

        :return: The identifiers of this Vehicle.  # noqa: E501
        :rtype: List[VehicleIdentifiers]
        """
        return self._identifiers

    @identifiers.setter
    def identifiers(self, identifiers):
        """Sets the identifiers of this Vehicle.

        Identifiers that can be used to identify the vehicle uniquely  # noqa: E501

        :param identifiers: The identifiers of this Vehicle.  # noqa: E501
        :type: List[VehicleIdentifiers]
        """
        if self._configuration.client_side_validation and identifiers is None:
            raise ValueError("Invalid value for `identifiers`, must not be `None`")  # noqa: E501
        if (self._configuration.client_side_validation and
                identifiers is not None and len(identifiers) < 1):
            raise ValueError("Invalid value for `identifiers`, number of items must be greater than or equal to `1`")  # noqa: E501

        self._identifiers = identifiers

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

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