# coding: utf-8

"""
    Lotus API

    Lotus is an open-core pricing and billing engine. We enable API companies to automate and optimize their custom usage-based pricing for any metric.  # noqa: E501

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

import pprint
import re  # noqa: F401

import six

class EventDetail(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 = {
        'event_name': 'str',
        'properties': 'dict(str, object)',
        'time_created': 'datetime',
        'idempotency_id': 'str',
        'customer_id': 'str'
    }

    attribute_map = {
        'event_name': 'event_name',
        'properties': 'properties',
        'time_created': 'time_created',
        'idempotency_id': 'idempotency_id',
        'customer_id': 'customer_id'
    }

    def __init__(self, event_name=None, properties=None, time_created=None, idempotency_id=None, customer_id=None):  # noqa: E501
        """EventDetail - a model defined in Swagger"""  # noqa: E501
        self._event_name = None
        self._properties = None
        self._time_created = None
        self._idempotency_id = None
        self._customer_id = None
        self.discriminator = None
        self.event_name = event_name
        if properties is not None:
            self.properties = properties
        self.time_created = time_created
        self.idempotency_id = idempotency_id
        self.customer_id = customer_id

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

        String name of the event, corresponds to definition in metrics  # noqa: E501

        :return: The event_name of this EventDetail.  # noqa: E501
        :rtype: str
        """
        return self._event_name

    @event_name.setter
    def event_name(self, event_name):
        """Sets the event_name of this EventDetail.

        String name of the event, corresponds to definition in metrics  # noqa: E501

        :param event_name: The event_name of this EventDetail.  # noqa: E501
        :type: str
        """
        if event_name is None:
            raise ValueError("Invalid value for `event_name`, must not be `None`")  # noqa: E501

        self._event_name = event_name

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

        Extra metadata on the event that can be filtered and queried on in the metrics. All key value pairs should have string keys and values can be either strings or numbers. Place subscription filters in this object to specify which subscription the event should be tracked under  # noqa: E501

        :return: The properties of this EventDetail.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._properties

    @properties.setter
    def properties(self, properties):
        """Sets the properties of this EventDetail.

        Extra metadata on the event that can be filtered and queried on in the metrics. All key value pairs should have string keys and values can be either strings or numbers. Place subscription filters in this object to specify which subscription the event should be tracked under  # noqa: E501

        :param properties: The properties of this EventDetail.  # noqa: E501
        :type: dict(str, object)
        """

        self._properties = properties

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

        The time that the event occured, represented as a datetime in RFC3339 in the UTC timezome.  # noqa: E501

        :return: The time_created of this EventDetail.  # noqa: E501
        :rtype: datetime
        """
        return self._time_created

    @time_created.setter
    def time_created(self, time_created):
        """Sets the time_created of this EventDetail.

        The time that the event occured, represented as a datetime in RFC3339 in the UTC timezome.  # noqa: E501

        :param time_created: The time_created of this EventDetail.  # noqa: E501
        :type: datetime
        """
        if time_created is None:
            raise ValueError("Invalid value for `time_created`, must not be `None`")  # noqa: E501

        self._time_created = time_created

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

        A unique identifier for the specific event being passed in. Passing in a unique id allows Lotus to make sure no double counting occurs. We recommend using a UUID4.  # noqa: E501

        :return: The idempotency_id of this EventDetail.  # noqa: E501
        :rtype: str
        """
        return self._idempotency_id

    @idempotency_id.setter
    def idempotency_id(self, idempotency_id):
        """Sets the idempotency_id of this EventDetail.

        A unique identifier for the specific event being passed in. Passing in a unique id allows Lotus to make sure no double counting occurs. We recommend using a UUID4.  # noqa: E501

        :param idempotency_id: The idempotency_id of this EventDetail.  # noqa: E501
        :type: str
        """
        if idempotency_id is None:
            raise ValueError("Invalid value for `idempotency_id`, must not be `None`")  # noqa: E501

        self._idempotency_id = idempotency_id

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

        The id of the customer that this event is associated with, usually the customer id in your backend  # noqa: E501

        :return: The customer_id of this EventDetail.  # noqa: E501
        :rtype: str
        """
        return self._customer_id

    @customer_id.setter
    def customer_id(self, customer_id):
        """Sets the customer_id of this EventDetail.

        The id of the customer that this event is associated with, usually the customer id in your backend  # noqa: E501

        :param customer_id: The customer_id of this EventDetail.  # noqa: E501
        :type: str
        """
        if customer_id is None:
            raise ValueError("Invalid value for `customer_id`, must not be `None`")  # noqa: E501

        self._customer_id = customer_id

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

        return self.__dict__ == other.__dict__

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