# coding: utf-8

"""
    aptos-api

    The aptos-api provider  # noqa: E501

    The version of the OpenAPI document: 1.0.0
    Generated by: https://openapi-generator.tech
"""

from datetime import date, datetime  # noqa: F401
import decimal  # noqa: F401
import functools  # noqa: F401
import io  # noqa: F401
import re  # noqa: F401
import typing  # noqa: F401
import typing_extensions  # noqa: F401
import uuid  # noqa: F401

import frozendict  # noqa: F401

from openapi_aptos_api import schemas  # noqa: F401


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

    Do not edit the class manually.
    """


    class MetaOapg:
        required = {
            "last_transaction_version",
            "last_transaction_timestamp",
            "metadata_uri",
            "description",
            "uri_mutable",
            "supply",
            "description_mutable",
            "table_handle",
            "collection_data_id_hash",
            "maximum_mutable",
            "creator_address",
            "maximum",
            "collection_name",
        }
        
        class properties:
            
            
            class collection_data_id_hash(
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    max_length = 64
                    min_length = 64
            
            
            class collection_name(
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    max_length = 128
                    min_length = 1
            
            
            class creator_address(
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    max_length = 66
                    min_length = 66
            description = schemas.StrSchema
            description_mutable = schemas.BoolSchema
            last_transaction_timestamp = schemas.StrSchema
            last_transaction_version = schemas.StrSchema
            maximum = schemas.StrSchema
            maximum_mutable = schemas.BoolSchema
            metadata_uri = schemas.StrSchema
            supply = schemas.StrSchema
            table_handle = schemas.StrSchema
            uri_mutable = schemas.BoolSchema
            __annotations__ = {
                "collection_data_id_hash": collection_data_id_hash,
                "collection_name": collection_name,
                "creator_address": creator_address,
                "description": description,
                "description_mutable": description_mutable,
                "last_transaction_timestamp": last_transaction_timestamp,
                "last_transaction_version": last_transaction_version,
                "maximum": maximum,
                "maximum_mutable": maximum_mutable,
                "metadata_uri": metadata_uri,
                "supply": supply,
                "table_handle": table_handle,
                "uri_mutable": uri_mutable,
            }
    
    last_transaction_version: MetaOapg.properties.last_transaction_version
    last_transaction_timestamp: MetaOapg.properties.last_transaction_timestamp
    metadata_uri: MetaOapg.properties.metadata_uri
    description: MetaOapg.properties.description
    uri_mutable: MetaOapg.properties.uri_mutable
    supply: MetaOapg.properties.supply
    description_mutable: MetaOapg.properties.description_mutable
    table_handle: MetaOapg.properties.table_handle
    collection_data_id_hash: MetaOapg.properties.collection_data_id_hash
    maximum_mutable: MetaOapg.properties.maximum_mutable
    creator_address: MetaOapg.properties.creator_address
    maximum: MetaOapg.properties.maximum
    collection_name: MetaOapg.properties.collection_name
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["collection_data_id_hash"]) -> MetaOapg.properties.collection_data_id_hash: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["collection_name"]) -> MetaOapg.properties.collection_name: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["creator_address"]) -> MetaOapg.properties.creator_address: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["description"]) -> MetaOapg.properties.description: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["description_mutable"]) -> MetaOapg.properties.description_mutable: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["last_transaction_timestamp"]) -> MetaOapg.properties.last_transaction_timestamp: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["last_transaction_version"]) -> MetaOapg.properties.last_transaction_version: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["maximum"]) -> MetaOapg.properties.maximum: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["maximum_mutable"]) -> MetaOapg.properties.maximum_mutable: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["metadata_uri"]) -> MetaOapg.properties.metadata_uri: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["supply"]) -> MetaOapg.properties.supply: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["table_handle"]) -> MetaOapg.properties.table_handle: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["uri_mutable"]) -> MetaOapg.properties.uri_mutable: ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["collection_data_id_hash", "collection_name", "creator_address", "description", "description_mutable", "last_transaction_timestamp", "last_transaction_version", "maximum", "maximum_mutable", "metadata_uri", "supply", "table_handle", "uri_mutable", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["collection_data_id_hash"]) -> MetaOapg.properties.collection_data_id_hash: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["collection_name"]) -> MetaOapg.properties.collection_name: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["creator_address"]) -> MetaOapg.properties.creator_address: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["description"]) -> MetaOapg.properties.description: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["description_mutable"]) -> MetaOapg.properties.description_mutable: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["last_transaction_timestamp"]) -> MetaOapg.properties.last_transaction_timestamp: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["last_transaction_version"]) -> MetaOapg.properties.last_transaction_version: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["maximum"]) -> MetaOapg.properties.maximum: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["maximum_mutable"]) -> MetaOapg.properties.maximum_mutable: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["metadata_uri"]) -> MetaOapg.properties.metadata_uri: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["supply"]) -> MetaOapg.properties.supply: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["table_handle"]) -> MetaOapg.properties.table_handle: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["uri_mutable"]) -> MetaOapg.properties.uri_mutable: ...
    
    @typing.overload
    def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ...
    
    def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["collection_data_id_hash", "collection_name", "creator_address", "description", "description_mutable", "last_transaction_timestamp", "last_transaction_version", "maximum", "maximum_mutable", "metadata_uri", "supply", "table_handle", "uri_mutable", ], str]):
        return super().get_item_oapg(name)
    

    def __new__(
        cls,
        *args: typing.Union[dict, frozendict.frozendict, ],
        last_transaction_version: typing.Union[MetaOapg.properties.last_transaction_version, str, ],
        last_transaction_timestamp: typing.Union[MetaOapg.properties.last_transaction_timestamp, str, ],
        metadata_uri: typing.Union[MetaOapg.properties.metadata_uri, str, ],
        description: typing.Union[MetaOapg.properties.description, str, ],
        uri_mutable: typing.Union[MetaOapg.properties.uri_mutable, bool, ],
        supply: typing.Union[MetaOapg.properties.supply, str, ],
        description_mutable: typing.Union[MetaOapg.properties.description_mutable, bool, ],
        table_handle: typing.Union[MetaOapg.properties.table_handle, str, ],
        collection_data_id_hash: typing.Union[MetaOapg.properties.collection_data_id_hash, str, ],
        maximum_mutable: typing.Union[MetaOapg.properties.maximum_mutable, bool, ],
        creator_address: typing.Union[MetaOapg.properties.creator_address, str, ],
        maximum: typing.Union[MetaOapg.properties.maximum, str, ],
        collection_name: typing.Union[MetaOapg.properties.collection_name, str, ],
        _configuration: typing.Optional[schemas.Configuration] = None,
        **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes],
    ) -> 'NFTCollectionItemResponse':
        return super().__new__(
            cls,
            *args,
            last_transaction_version=last_transaction_version,
            last_transaction_timestamp=last_transaction_timestamp,
            metadata_uri=metadata_uri,
            description=description,
            uri_mutable=uri_mutable,
            supply=supply,
            description_mutable=description_mutable,
            table_handle=table_handle,
            collection_data_id_hash=collection_data_id_hash,
            maximum_mutable=maximum_mutable,
            creator_address=creator_address,
            maximum=maximum,
            collection_name=collection_name,
            _configuration=_configuration,
            **kwargs,
        )
