# coding: utf-8

"""
    Trackside Software TeamDB API v2.0

    This API enables you to access TeamDB data  # noqa: E501

    OpenAPI spec version: 2.0
    Contact: support@trackside.fr
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""


import pprint
import re  # noqa: F401

import six

from teamdbapi.configuration import Configuration


class Car(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',
        'name': 'str',
        'event_id': 'str',
        'type_car_id': 'str',
        'last_update_date_utc': 'datetime',
        'last_update_user': 'str',
        'revision': 'int',
        'lap_count': 'int',
        'run_count': 'int',
        'session_count': 'int',
        'distance': 'float',
        'distance_real': 'float'
    }

    attribute_map = {
        'id': 'Id',
        'name': 'Name',
        'event_id': 'EventId',
        'type_car_id': 'TypeCarId',
        'last_update_date_utc': 'LastUpdateDateUtc',
        'last_update_user': 'LastUpdateUser',
        'revision': 'Revision',
        'lap_count': 'LapCount',
        'run_count': 'RunCount',
        'session_count': 'SessionCount',
        'distance': 'Distance',
        'distance_real': 'DistanceReal'
    }

    def __init__(self, id=None, name=None, event_id=None, type_car_id=None, last_update_date_utc=None, last_update_user=None, revision=None, lap_count=None, run_count=None, session_count=None, distance=None, distance_real=None, _configuration=None):  # noqa: E501
        """Car - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._id = None
        self._name = None
        self._event_id = None
        self._type_car_id = None
        self._last_update_date_utc = None
        self._last_update_user = None
        self._revision = None
        self._lap_count = None
        self._run_count = None
        self._session_count = None
        self._distance = None
        self._distance_real = None
        self.discriminator = None

        self.id = id
        self.name = name
        self.event_id = event_id
        self.type_car_id = type_car_id
        if last_update_date_utc is not None:
            self.last_update_date_utc = last_update_date_utc
        if last_update_user is not None:
            self.last_update_user = last_update_user
        if revision is not None:
            self.revision = revision
        if lap_count is not None:
            self.lap_count = lap_count
        if run_count is not None:
            self.run_count = run_count
        if session_count is not None:
            self.session_count = session_count
        if distance is not None:
            self.distance = distance
        if distance_real is not None:
            self.distance_real = distance_real

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

        The unique car Id.  Set the Id to Guid.Empty (00000000-0000-0000-0000-000000000000) if you want to create a new Car.  # noqa: E501

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

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

        The unique car Id.  Set the Id to Guid.Empty (00000000-0000-0000-0000-000000000000) if you want to create a new Car.  # noqa: E501

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

        self._id = id

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

        The car name  # noqa: E501

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

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

        The car name  # noqa: E501

        :param name: The name of this Car.  # noqa: E501
        :type: str
        """
        if self._configuration.client_side_validation and name is None:
            raise ValueError("Invalid value for `name`, must not be `None`")  # noqa: E501
        if (self._configuration.client_side_validation and
                name is not None and len(name) < 1):
            raise ValueError("Invalid value for `name`, length must be greater than or equal to `1`")  # noqa: E501

        self._name = name

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

        The event unique id to which the car is linked.  # noqa: E501

        :return: The event_id of this Car.  # noqa: E501
        :rtype: str
        """
        return self._event_id

    @event_id.setter
    def event_id(self, event_id):
        """Sets the event_id of this Car.

        The event unique id to which the car is linked.  # noqa: E501

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

        self._event_id = event_id

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

        The car type unique id.  # noqa: E501

        :return: The type_car_id of this Car.  # noqa: E501
        :rtype: str
        """
        return self._type_car_id

    @type_car_id.setter
    def type_car_id(self, type_car_id):
        """Sets the type_car_id of this Car.

        The car type unique id.  # noqa: E501

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

        self._type_car_id = type_car_id

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

        The last utc date time when the properties of this object have been updated.  This field will be automatically updated from the server side each time you update the object.  # noqa: E501

        :return: The last_update_date_utc of this Car.  # noqa: E501
        :rtype: datetime
        """
        return self._last_update_date_utc

    @last_update_date_utc.setter
    def last_update_date_utc(self, last_update_date_utc):
        """Sets the last_update_date_utc of this Car.

        The last utc date time when the properties of this object have been updated.  This field will be automatically updated from the server side each time you update the object.  # noqa: E501

        :param last_update_date_utc: The last_update_date_utc of this Car.  # noqa: E501
        :type: datetime
        """

        self._last_update_date_utc = last_update_date_utc

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

        The name of the last user having updated this object.  This field will be automatically updated from the server side each time you update the object.  # noqa: E501

        :return: The last_update_user of this Car.  # noqa: E501
        :rtype: str
        """
        return self._last_update_user

    @last_update_user.setter
    def last_update_user(self, last_update_user):
        """Sets the last_update_user of this Car.

        The name of the last user having updated this object.  This field will be automatically updated from the server side each time you update the object.  # noqa: E501

        :param last_update_user: The last_update_user of this Car.  # noqa: E501
        :type: str
        """

        self._last_update_user = last_update_user

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

        The revision number of the object.  # noqa: E501

        :return: The revision of this Car.  # noqa: E501
        :rtype: int
        """
        return self._revision

    @revision.setter
    def revision(self, revision):
        """Sets the revision of this Car.

        The revision number of the object.  # noqa: E501

        :param revision: The revision of this Car.  # noqa: E501
        :type: int
        """

        self._revision = revision

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

        Lap count for the car  # noqa: E501

        :return: The lap_count of this Car.  # noqa: E501
        :rtype: int
        """
        return self._lap_count

    @lap_count.setter
    def lap_count(self, lap_count):
        """Sets the lap_count of this Car.

        Lap count for the car  # noqa: E501

        :param lap_count: The lap_count of this Car.  # noqa: E501
        :type: int
        """

        self._lap_count = lap_count

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

        Run count for the car  # noqa: E501

        :return: The run_count of this Car.  # noqa: E501
        :rtype: int
        """
        return self._run_count

    @run_count.setter
    def run_count(self, run_count):
        """Sets the run_count of this Car.

        Run count for the car  # noqa: E501

        :param run_count: The run_count of this Car.  # noqa: E501
        :type: int
        """

        self._run_count = run_count

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

        Session count for the car  # noqa: E501

        :return: The session_count of this Car.  # noqa: E501
        :rtype: int
        """
        return self._session_count

    @session_count.setter
    def session_count(self, session_count):
        """Sets the session_count of this Car.

        Session count for the car  # noqa: E501

        :param session_count: The session_count of this Car.  # noqa: E501
        :type: int
        """

        self._session_count = session_count

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

        Distance performed by the car  # noqa: E501

        :return: The distance of this Car.  # noqa: E501
        :rtype: float
        """
        return self._distance

    @distance.setter
    def distance(self, distance):
        """Sets the distance of this Car.

        Distance performed by the car  # noqa: E501

        :param distance: The distance of this Car.  # noqa: E501
        :type: float
        """

        self._distance = distance

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

        Distance real performed by the car  # noqa: E501

        :return: The distance_real of this Car.  # noqa: E501
        :rtype: float
        """
        return self._distance_real

    @distance_real.setter
    def distance_real(self, distance_real):
        """Sets the distance_real of this Car.

        Distance real performed by the car  # noqa: E501

        :param distance_real: The distance_real of this Car.  # noqa: E501
        :type: float
        """

        self._distance_real = distance_real

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

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