# coding: utf-8

"""
    external/v1/auth_service.proto

    No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)  # noqa: E501

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

    NOTE
    ----
    standard swagger-codegen-cli for this python client has been modified
    by custom templates. The purpose of these templates is to include
    typing information in the API and Model code. Please refer to the
    main grid repository for more info
"""

import pprint
import re  # noqa: F401

from typing import TYPE_CHECKING

import six

if TYPE_CHECKING:
    from datetime import datetime
    from lightning_cloud.openapi.models import *

class V1UsageDetails(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 = {
        'billed_bytes': 'str',
        'billed_time_seconds': 'str',
        'cost': 'float',
        'ended_at': 'datetime',
        'free': 'bool',
        'hourly_price': 'float',
        'instance_count': 'str',
        'instance_type': 'str',
        'saved_cost': 'float',
        'spot': 'bool',
        'started_at': 'datetime'
    }

    attribute_map = {
        'billed_bytes': 'billedBytes',
        'billed_time_seconds': 'billedTimeSeconds',
        'cost': 'cost',
        'ended_at': 'endedAt',
        'free': 'free',
        'hourly_price': 'hourlyPrice',
        'instance_count': 'instanceCount',
        'instance_type': 'instanceType',
        'saved_cost': 'savedCost',
        'spot': 'spot',
        'started_at': 'startedAt'
    }

    def __init__(self, billed_bytes: 'str' =None, billed_time_seconds: 'str' =None, cost: 'float' =None, ended_at: 'datetime' =None, free: 'bool' =None, hourly_price: 'float' =None, instance_count: 'str' =None, instance_type: 'str' =None, saved_cost: 'float' =None, spot: 'bool' =None, started_at: 'datetime' =None):  # noqa: E501
        """V1UsageDetails - a model defined in Swagger"""  # noqa: E501
        self._billed_bytes = None
        self._billed_time_seconds = None
        self._cost = None
        self._ended_at = None
        self._free = None
        self._hourly_price = None
        self._instance_count = None
        self._instance_type = None
        self._saved_cost = None
        self._spot = None
        self._started_at = None
        self.discriminator = None
        if billed_bytes is not None:
            self.billed_bytes = billed_bytes
        if billed_time_seconds is not None:
            self.billed_time_seconds = billed_time_seconds
        if cost is not None:
            self.cost = cost
        if ended_at is not None:
            self.ended_at = ended_at
        if free is not None:
            self.free = free
        if hourly_price is not None:
            self.hourly_price = hourly_price
        if instance_count is not None:
            self.instance_count = instance_count
        if instance_type is not None:
            self.instance_type = instance_type
        if saved_cost is not None:
            self.saved_cost = saved_cost
        if spot is not None:
            self.spot = spot
        if started_at is not None:
            self.started_at = started_at

    @property
    def billed_bytes(self) -> 'str':
        """Gets the billed_bytes of this V1UsageDetails.  # noqa: E501


        :return: The billed_bytes of this V1UsageDetails.  # noqa: E501
        :rtype: str
        """
        return self._billed_bytes

    @billed_bytes.setter
    def billed_bytes(self, billed_bytes: 'str'):
        """Sets the billed_bytes of this V1UsageDetails.


        :param billed_bytes: The billed_bytes of this V1UsageDetails.  # noqa: E501
        :type: str
        """

        self._billed_bytes = billed_bytes

    @property
    def billed_time_seconds(self) -> 'str':
        """Gets the billed_time_seconds of this V1UsageDetails.  # noqa: E501


        :return: The billed_time_seconds of this V1UsageDetails.  # noqa: E501
        :rtype: str
        """
        return self._billed_time_seconds

    @billed_time_seconds.setter
    def billed_time_seconds(self, billed_time_seconds: 'str'):
        """Sets the billed_time_seconds of this V1UsageDetails.


        :param billed_time_seconds: The billed_time_seconds of this V1UsageDetails.  # noqa: E501
        :type: str
        """

        self._billed_time_seconds = billed_time_seconds

    @property
    def cost(self) -> 'float':
        """Gets the cost of this V1UsageDetails.  # noqa: E501


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

    @cost.setter
    def cost(self, cost: 'float'):
        """Sets the cost of this V1UsageDetails.


        :param cost: The cost of this V1UsageDetails.  # noqa: E501
        :type: float
        """

        self._cost = cost

    @property
    def ended_at(self) -> 'datetime':
        """Gets the ended_at of this V1UsageDetails.  # noqa: E501


        :return: The ended_at of this V1UsageDetails.  # noqa: E501
        :rtype: datetime
        """
        return self._ended_at

    @ended_at.setter
    def ended_at(self, ended_at: 'datetime'):
        """Sets the ended_at of this V1UsageDetails.


        :param ended_at: The ended_at of this V1UsageDetails.  # noqa: E501
        :type: datetime
        """

        self._ended_at = ended_at

    @property
    def free(self) -> 'bool':
        """Gets the free of this V1UsageDetails.  # noqa: E501


        :return: The free of this V1UsageDetails.  # noqa: E501
        :rtype: bool
        """
        return self._free

    @free.setter
    def free(self, free: 'bool'):
        """Sets the free of this V1UsageDetails.


        :param free: The free of this V1UsageDetails.  # noqa: E501
        :type: bool
        """

        self._free = free

    @property
    def hourly_price(self) -> 'float':
        """Gets the hourly_price of this V1UsageDetails.  # noqa: E501


        :return: The hourly_price of this V1UsageDetails.  # noqa: E501
        :rtype: float
        """
        return self._hourly_price

    @hourly_price.setter
    def hourly_price(self, hourly_price: 'float'):
        """Sets the hourly_price of this V1UsageDetails.


        :param hourly_price: The hourly_price of this V1UsageDetails.  # noqa: E501
        :type: float
        """

        self._hourly_price = hourly_price

    @property
    def instance_count(self) -> 'str':
        """Gets the instance_count of this V1UsageDetails.  # noqa: E501


        :return: The instance_count of this V1UsageDetails.  # noqa: E501
        :rtype: str
        """
        return self._instance_count

    @instance_count.setter
    def instance_count(self, instance_count: 'str'):
        """Sets the instance_count of this V1UsageDetails.


        :param instance_count: The instance_count of this V1UsageDetails.  # noqa: E501
        :type: str
        """

        self._instance_count = instance_count

    @property
    def instance_type(self) -> 'str':
        """Gets the instance_type of this V1UsageDetails.  # noqa: E501


        :return: The instance_type of this V1UsageDetails.  # noqa: E501
        :rtype: str
        """
        return self._instance_type

    @instance_type.setter
    def instance_type(self, instance_type: 'str'):
        """Sets the instance_type of this V1UsageDetails.


        :param instance_type: The instance_type of this V1UsageDetails.  # noqa: E501
        :type: str
        """

        self._instance_type = instance_type

    @property
    def saved_cost(self) -> 'float':
        """Gets the saved_cost of this V1UsageDetails.  # noqa: E501


        :return: The saved_cost of this V1UsageDetails.  # noqa: E501
        :rtype: float
        """
        return self._saved_cost

    @saved_cost.setter
    def saved_cost(self, saved_cost: 'float'):
        """Sets the saved_cost of this V1UsageDetails.


        :param saved_cost: The saved_cost of this V1UsageDetails.  # noqa: E501
        :type: float
        """

        self._saved_cost = saved_cost

    @property
    def spot(self) -> 'bool':
        """Gets the spot of this V1UsageDetails.  # noqa: E501


        :return: The spot of this V1UsageDetails.  # noqa: E501
        :rtype: bool
        """
        return self._spot

    @spot.setter
    def spot(self, spot: 'bool'):
        """Sets the spot of this V1UsageDetails.


        :param spot: The spot of this V1UsageDetails.  # noqa: E501
        :type: bool
        """

        self._spot = spot

    @property
    def started_at(self) -> 'datetime':
        """Gets the started_at of this V1UsageDetails.  # noqa: E501


        :return: The started_at of this V1UsageDetails.  # noqa: E501
        :rtype: datetime
        """
        return self._started_at

    @started_at.setter
    def started_at(self, started_at: 'datetime'):
        """Sets the started_at of this V1UsageDetails.


        :param started_at: The started_at of this V1UsageDetails.  # noqa: E501
        :type: datetime
        """

        self._started_at = started_at

    def to_dict(self) -> dict:
        """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(V1UsageDetails, dict):
            for key, value in self.items():
                result[key] = value

        return result

    def to_str(self) -> str:
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self) -> str:
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other: 'V1UsageDetails') -> bool:
        """Returns true if both objects are equal"""
        if not isinstance(other, V1UsageDetails):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other: 'V1UsageDetails') -> bool:
        """Returns true if both objects are not equal"""
        return not self == other
