from datetime import date, datetime  # noqa: F401
from typing import Dict, List  # noqa: F401

from timestep.api.openai.v1 import util
from timestep.api.openai.v1.models.base_model import Model
from timestep.api.openai.v1.models.vector_store_expiration_after import \
    VectorStoreExpirationAfter  # noqa: E501
from timestep.api.openai.v1.models.vector_store_object_file_counts import \
    VectorStoreObjectFileCounts  # noqa: E501


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

    Do not edit the class manually.
    """

    def __init__(self, id=None, object=None, created_at=None, name=None, usage_bytes=None, file_counts=None, status=None, expires_after=None, expires_at=None, last_active_at=None, metadata=None):  # noqa: E501
        """VectorStoreObject - a model defined in OpenAPI

        :param id: The id of this VectorStoreObject.  # noqa: E501
        :type id: str
        :param object: The object of this VectorStoreObject.  # noqa: E501
        :type object: str
        :param created_at: The created_at of this VectorStoreObject.  # noqa: E501
        :type created_at: int
        :param name: The name of this VectorStoreObject.  # noqa: E501
        :type name: str
        :param usage_bytes: The usage_bytes of this VectorStoreObject.  # noqa: E501
        :type usage_bytes: int
        :param file_counts: The file_counts of this VectorStoreObject.  # noqa: E501
        :type file_counts: VectorStoreObjectFileCounts
        :param status: The status of this VectorStoreObject.  # noqa: E501
        :type status: str
        :param expires_after: The expires_after of this VectorStoreObject.  # noqa: E501
        :type expires_after: VectorStoreExpirationAfter
        :param expires_at: The expires_at of this VectorStoreObject.  # noqa: E501
        :type expires_at: int
        :param last_active_at: The last_active_at of this VectorStoreObject.  # noqa: E501
        :type last_active_at: int
        :param metadata: The metadata of this VectorStoreObject.  # noqa: E501
        :type metadata: object
        """
        self.openapi_types = {
            'id': str,
            'object': str,
            'created_at': int,
            'name': str,
            'usage_bytes': int,
            'file_counts': VectorStoreObjectFileCounts,
            'status': str,
            'expires_after': VectorStoreExpirationAfter,
            'expires_at': int,
            'last_active_at': int,
            'metadata': object
        }

        self.attribute_map = {
            'id': 'id',
            'object': 'object',
            'created_at': 'created_at',
            'name': 'name',
            'usage_bytes': 'usage_bytes',
            'file_counts': 'file_counts',
            'status': 'status',
            'expires_after': 'expires_after',
            'expires_at': 'expires_at',
            'last_active_at': 'last_active_at',
            'metadata': 'metadata'
        }

        self._id = id
        self._object = object
        self._created_at = created_at
        self._name = name
        self._usage_bytes = usage_bytes
        self._file_counts = file_counts
        self._status = status
        self._expires_after = expires_after
        self._expires_at = expires_at
        self._last_active_at = last_active_at
        self._metadata = metadata

    @classmethod
    def from_dict(cls, dikt) -> 'VectorStoreObject':
        """Returns the dict as a model

        :param dikt: A dict.
        :type: dict
        :return: The VectorStoreObject of this VectorStoreObject.  # noqa: E501
        :rtype: VectorStoreObject
        """
        return util.deserialize_model(dikt, cls)

    @property
    def id(self) -> str:
        """Gets the id of this VectorStoreObject.

        The identifier, which can be referenced in API endpoints.  # noqa: E501

        :return: The id of this VectorStoreObject.
        :rtype: str
        """
        return self._id

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

        The identifier, which can be referenced in API endpoints.  # noqa: E501

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

        self._id = id

    @property
    def object(self) -> str:
        """Gets the object of this VectorStoreObject.

        The object type, which is always `vector_store`.  # noqa: E501

        :return: The object of this VectorStoreObject.
        :rtype: str
        """
        return self._object

    @object.setter
    def object(self, object: str):
        """Sets the object of this VectorStoreObject.

        The object type, which is always `vector_store`.  # noqa: E501

        :param object: The object of this VectorStoreObject.
        :type object: str
        """
        allowed_values = ["vector_store"]  # noqa: E501
        if object not in allowed_values:
            raise ValueError(
                "Invalid value for `object` ({0}), must be one of {1}"
                .format(object, allowed_values)
            )

        self._object = object

    @property
    def created_at(self) -> int:
        """Gets the created_at of this VectorStoreObject.

        The Unix timestamp (in seconds) for when the vector store was created.  # noqa: E501

        :return: The created_at of this VectorStoreObject.
        :rtype: int
        """
        return self._created_at

    @created_at.setter
    def created_at(self, created_at: int):
        """Sets the created_at of this VectorStoreObject.

        The Unix timestamp (in seconds) for when the vector store was created.  # noqa: E501

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

        self._created_at = created_at

    @property
    def name(self) -> str:
        """Gets the name of this VectorStoreObject.

        The name of the vector store.  # noqa: E501

        :return: The name of this VectorStoreObject.
        :rtype: str
        """
        return self._name

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

        The name of the vector store.  # noqa: E501

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

        self._name = name

    @property
    def usage_bytes(self) -> int:
        """Gets the usage_bytes of this VectorStoreObject.

        The total number of bytes used by the files in the vector store.  # noqa: E501

        :return: The usage_bytes of this VectorStoreObject.
        :rtype: int
        """
        return self._usage_bytes

    @usage_bytes.setter
    def usage_bytes(self, usage_bytes: int):
        """Sets the usage_bytes of this VectorStoreObject.

        The total number of bytes used by the files in the vector store.  # noqa: E501

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

        self._usage_bytes = usage_bytes

    @property
    def file_counts(self) -> VectorStoreObjectFileCounts:
        """Gets the file_counts of this VectorStoreObject.


        :return: The file_counts of this VectorStoreObject.
        :rtype: VectorStoreObjectFileCounts
        """
        return self._file_counts

    @file_counts.setter
    def file_counts(self, file_counts: VectorStoreObjectFileCounts):
        """Sets the file_counts of this VectorStoreObject.


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

        self._file_counts = file_counts

    @property
    def status(self) -> str:
        """Gets the status of this VectorStoreObject.

        The status of the vector store, which can be either `expired`, `in_progress`, or `completed`. A status of `completed` indicates that the vector store is ready for use.  # noqa: E501

        :return: The status of this VectorStoreObject.
        :rtype: str
        """
        return self._status

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

        The status of the vector store, which can be either `expired`, `in_progress`, or `completed`. A status of `completed` indicates that the vector store is ready for use.  # noqa: E501

        :param status: The status of this VectorStoreObject.
        :type status: str
        """
        allowed_values = ["expired", "in_progress", "completed"]  # noqa: E501
        if status not in allowed_values:
            raise ValueError(
                "Invalid value for `status` ({0}), must be one of {1}"
                .format(status, allowed_values)
            )

        self._status = status

    @property
    def expires_after(self) -> VectorStoreExpirationAfter:
        """Gets the expires_after of this VectorStoreObject.


        :return: The expires_after of this VectorStoreObject.
        :rtype: VectorStoreExpirationAfter
        """
        return self._expires_after

    @expires_after.setter
    def expires_after(self, expires_after: VectorStoreExpirationAfter):
        """Sets the expires_after of this VectorStoreObject.


        :param expires_after: The expires_after of this VectorStoreObject.
        :type expires_after: VectorStoreExpirationAfter
        """

        self._expires_after = expires_after

    @property
    def expires_at(self) -> int:
        """Gets the expires_at of this VectorStoreObject.

        The Unix timestamp (in seconds) for when the vector store will expire.  # noqa: E501

        :return: The expires_at of this VectorStoreObject.
        :rtype: int
        """
        return self._expires_at

    @expires_at.setter
    def expires_at(self, expires_at: int):
        """Sets the expires_at of this VectorStoreObject.

        The Unix timestamp (in seconds) for when the vector store will expire.  # noqa: E501

        :param expires_at: The expires_at of this VectorStoreObject.
        :type expires_at: int
        """

        self._expires_at = expires_at

    @property
    def last_active_at(self) -> int:
        """Gets the last_active_at of this VectorStoreObject.

        The Unix timestamp (in seconds) for when the vector store was last active.  # noqa: E501

        :return: The last_active_at of this VectorStoreObject.
        :rtype: int
        """
        return self._last_active_at

    @last_active_at.setter
    def last_active_at(self, last_active_at: int):
        """Sets the last_active_at of this VectorStoreObject.

        The Unix timestamp (in seconds) for when the vector store was last active.  # noqa: E501

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

        self._last_active_at = last_active_at

    @property
    def metadata(self) -> object:
        """Gets the metadata of this VectorStoreObject.

        Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format. Keys can be a maximum of 64 characters long and values can be a maxium of 512 characters long.   # noqa: E501

        :return: The metadata of this VectorStoreObject.
        :rtype: object
        """
        return self._metadata

    @metadata.setter
    def metadata(self, metadata: object):
        """Sets the metadata of this VectorStoreObject.

        Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format. Keys can be a maximum of 64 characters long and values can be a maxium of 512 characters long.   # noqa: E501

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

        self._metadata = metadata
