# coding: utf-8

"""
    VeeRoute.LSS Lastmile

    VeeRoute.LSS Lastmile API  # noqa: E501

    The version of the OpenAPI document: 3.6.163073
    Contact: support@veeroute.com
    Generated by: https://openapi-generator.tech
"""


import pprint
import re  # noqa: F401

import six

from vrt_lss_lastmile.configuration import Configuration


class Statistics(object):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_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.
    """
    openapi_types = {
        'cost': 'float',
        'reward': 'float',
        'measurements': 'Measurements',
        'orders_count': 'int',
        'performers_count': 'int',
        'capacity_utilization': 'Capacity',
        'capacity_max': 'Capacity',
        'quality': 'QualityStatistics'
    }

    attribute_map = {
        'cost': 'cost',
        'reward': 'reward',
        'measurements': 'measurements',
        'orders_count': 'orders_count',
        'performers_count': 'performers_count',
        'capacity_utilization': 'capacity_utilization',
        'capacity_max': 'capacity_max',
        'quality': 'quality'
    }

    def __init__(self, cost=None, reward=None, measurements=None, orders_count=None, performers_count=None, capacity_utilization=None, capacity_max=None, quality=None, local_vars_configuration=None):  # noqa: E501
        """Statistics - a model defined in OpenAPI"""  # noqa: E501
        if local_vars_configuration is None:
            local_vars_configuration = Configuration()
        self.local_vars_configuration = local_vars_configuration

        self._cost = None
        self._reward = None
        self._measurements = None
        self._orders_count = None
        self._performers_count = None
        self._capacity_utilization = None
        self._capacity_max = None
        self._quality = None
        self.discriminator = None

        self.cost = cost
        self.reward = reward
        self.measurements = measurements
        self.orders_count = orders_count
        self.performers_count = performers_count
        self.capacity_utilization = capacity_utilization
        self.capacity_max = capacity_max
        self.quality = quality

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

        Total costs calculated based on the performer's and transport tariffs. The total cost is equal to the difference between the total reward (reward) and expenses (cost).   # noqa: E501

        :return: The cost of this Statistics.  # noqa: E501
        :rtype: float
        """
        return self._cost

    @cost.setter
    def cost(self, cost):
        """Sets the cost of this Statistics.

        Total costs calculated based on the performer's and transport tariffs. The total cost is equal to the difference between the total reward (reward) and expenses (cost).   # noqa: E501

        :param cost: The cost of this Statistics.  # noqa: E501
        :type: float
        """
        if self.local_vars_configuration.client_side_validation and cost is None:  # noqa: E501
            raise ValueError("Invalid value for `cost`, must not be `None`")  # noqa: E501
        if (self.local_vars_configuration.client_side_validation and
                cost is not None and cost < 0):  # noqa: E501
            raise ValueError("Invalid value for `cost`, must be a value greater than or equal to `0`")  # noqa: E501

        self._cost = cost

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

        The total reward for orders fulfillment.  # noqa: E501

        :return: The reward of this Statistics.  # noqa: E501
        :rtype: float
        """
        return self._reward

    @reward.setter
    def reward(self, reward):
        """Sets the reward of this Statistics.

        The total reward for orders fulfillment.  # noqa: E501

        :param reward: The reward of this Statistics.  # noqa: E501
        :type: float
        """
        if self.local_vars_configuration.client_side_validation and reward is None:  # noqa: E501
            raise ValueError("Invalid value for `reward`, must not be `None`")  # noqa: E501
        if (self.local_vars_configuration.client_side_validation and
                reward is not None and reward < 0):  # noqa: E501
            raise ValueError("Invalid value for `reward`, must be a value greater than or equal to `0`")  # noqa: E501

        self._reward = reward

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


        :return: The measurements of this Statistics.  # noqa: E501
        :rtype: Measurements
        """
        return self._measurements

    @measurements.setter
    def measurements(self, measurements):
        """Sets the measurements of this Statistics.


        :param measurements: The measurements of this Statistics.  # noqa: E501
        :type: Measurements
        """

        self._measurements = measurements

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

        The total number of assigned orders.  # noqa: E501

        :return: The orders_count of this Statistics.  # noqa: E501
        :rtype: int
        """
        return self._orders_count

    @orders_count.setter
    def orders_count(self, orders_count):
        """Sets the orders_count of this Statistics.

        The total number of assigned orders.  # noqa: E501

        :param orders_count: The orders_count of this Statistics.  # noqa: E501
        :type: int
        """
        if self.local_vars_configuration.client_side_validation and orders_count is None:  # noqa: E501
            raise ValueError("Invalid value for `orders_count`, must not be `None`")  # noqa: E501
        if (self.local_vars_configuration.client_side_validation and
                orders_count is not None and orders_count > 9000):  # noqa: E501
            raise ValueError("Invalid value for `orders_count`, must be a value less than or equal to `9000`")  # noqa: E501
        if (self.local_vars_configuration.client_side_validation and
                orders_count is not None and orders_count < 0):  # noqa: E501
            raise ValueError("Invalid value for `orders_count`, must be a value greater than or equal to `0`")  # noqa: E501

        self._orders_count = orders_count

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

        The total number of performers involved in orders fulfillment.  # noqa: E501

        :return: The performers_count of this Statistics.  # noqa: E501
        :rtype: int
        """
        return self._performers_count

    @performers_count.setter
    def performers_count(self, performers_count):
        """Sets the performers_count of this Statistics.

        The total number of performers involved in orders fulfillment.  # noqa: E501

        :param performers_count: The performers_count of this Statistics.  # noqa: E501
        :type: int
        """
        if self.local_vars_configuration.client_side_validation and performers_count is None:  # noqa: E501
            raise ValueError("Invalid value for `performers_count`, must not be `None`")  # noqa: E501
        if (self.local_vars_configuration.client_side_validation and
                performers_count is not None and performers_count > 9000):  # noqa: E501
            raise ValueError("Invalid value for `performers_count`, must be a value less than or equal to `9000`")  # noqa: E501
        if (self.local_vars_configuration.client_side_validation and
                performers_count is not None and performers_count < 0):  # noqa: E501
            raise ValueError("Invalid value for `performers_count`, must be a value greater than or equal to `0`")  # noqa: E501

        self._performers_count = performers_count

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


        :return: The capacity_utilization of this Statistics.  # noqa: E501
        :rtype: Capacity
        """
        return self._capacity_utilization

    @capacity_utilization.setter
    def capacity_utilization(self, capacity_utilization):
        """Sets the capacity_utilization of this Statistics.


        :param capacity_utilization: The capacity_utilization of this Statistics.  # noqa: E501
        :type: Capacity
        """

        self._capacity_utilization = capacity_utilization

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


        :return: The capacity_max of this Statistics.  # noqa: E501
        :rtype: Capacity
        """
        return self._capacity_max

    @capacity_max.setter
    def capacity_max(self, capacity_max):
        """Sets the capacity_max of this Statistics.


        :param capacity_max: The capacity_max of this Statistics.  # noqa: E501
        :type: Capacity
        """

        self._capacity_max = capacity_max

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


        :return: The quality of this Statistics.  # noqa: E501
        :rtype: QualityStatistics
        """
        return self._quality

    @quality.setter
    def quality(self, quality):
        """Sets the quality of this Statistics.


        :param quality: The quality of this Statistics.  # noqa: E501
        :type: QualityStatistics
        """

        self._quality = quality

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.openapi_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

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

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