# 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 NFTOwnerResponse(
    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",
            "amount",
            "last_transaction_timestamp",
            "token_data_id_hash",
            "collection_data_id_hash",
            "name",
            "token_properties",
            "creator_address",
            "owner_address",
            "property_version",
            "collection_name",
            "table_type",
        }
        
        class properties:
            amount = schemas.StrSchema
            
            
            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
            last_transaction_timestamp = schemas.StrSchema
            last_transaction_version = schemas.StrSchema
            
            
            class name(
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    max_length = 128
                    min_length = 1
            
            
            class owner_address(
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    max_length = 66
                    min_length = 66
            property_version = schemas.StrSchema
            table_type = schemas.StrSchema
            
            
            class token_data_id_hash(
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    max_length = 64
                    min_length = 64
            
            
            class token_properties(
                schemas.DictBase,
                schemas.NoneBase,
                schemas.Schema,
                schemas.NoneFrozenDictMixin
            ):
            
            
                def __new__(
                    cls,
                    *args: typing.Union[dict, frozendict.frozendict, None, ],
                    _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],
                ) -> 'token_properties':
                    return super().__new__(
                        cls,
                        *args,
                        _configuration=_configuration,
                        **kwargs,
                    )
            __annotations__ = {
                "amount": amount,
                "collection_data_id_hash": collection_data_id_hash,
                "collection_name": collection_name,
                "creator_address": creator_address,
                "last_transaction_timestamp": last_transaction_timestamp,
                "last_transaction_version": last_transaction_version,
                "name": name,
                "owner_address": owner_address,
                "property_version": property_version,
                "table_type": table_type,
                "token_data_id_hash": token_data_id_hash,
                "token_properties": token_properties,
            }
    
    last_transaction_version: MetaOapg.properties.last_transaction_version
    amount: MetaOapg.properties.amount
    last_transaction_timestamp: MetaOapg.properties.last_transaction_timestamp
    token_data_id_hash: MetaOapg.properties.token_data_id_hash
    collection_data_id_hash: MetaOapg.properties.collection_data_id_hash
    name: MetaOapg.properties.name
    token_properties: MetaOapg.properties.token_properties
    creator_address: MetaOapg.properties.creator_address
    owner_address: MetaOapg.properties.owner_address
    property_version: MetaOapg.properties.property_version
    collection_name: MetaOapg.properties.collection_name
    table_type: MetaOapg.properties.table_type
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["amount"]) -> MetaOapg.properties.amount: ...
    
    @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["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["name"]) -> MetaOapg.properties.name: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["owner_address"]) -> MetaOapg.properties.owner_address: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["property_version"]) -> MetaOapg.properties.property_version: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["table_type"]) -> MetaOapg.properties.table_type: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["token_data_id_hash"]) -> MetaOapg.properties.token_data_id_hash: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["token_properties"]) -> MetaOapg.properties.token_properties: ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["amount", "collection_data_id_hash", "collection_name", "creator_address", "last_transaction_timestamp", "last_transaction_version", "name", "owner_address", "property_version", "table_type", "token_data_id_hash", "token_properties", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["amount"]) -> MetaOapg.properties.amount: ...
    
    @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["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["name"]) -> MetaOapg.properties.name: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["owner_address"]) -> MetaOapg.properties.owner_address: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["property_version"]) -> MetaOapg.properties.property_version: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["table_type"]) -> MetaOapg.properties.table_type: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["token_data_id_hash"]) -> MetaOapg.properties.token_data_id_hash: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["token_properties"]) -> MetaOapg.properties.token_properties: ...
    
    @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["amount", "collection_data_id_hash", "collection_name", "creator_address", "last_transaction_timestamp", "last_transaction_version", "name", "owner_address", "property_version", "table_type", "token_data_id_hash", "token_properties", ], 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, ],
        amount: typing.Union[MetaOapg.properties.amount, str, ],
        last_transaction_timestamp: typing.Union[MetaOapg.properties.last_transaction_timestamp, str, ],
        token_data_id_hash: typing.Union[MetaOapg.properties.token_data_id_hash, str, ],
        collection_data_id_hash: typing.Union[MetaOapg.properties.collection_data_id_hash, str, ],
        name: typing.Union[MetaOapg.properties.name, str, ],
        token_properties: typing.Union[MetaOapg.properties.token_properties, dict, frozendict.frozendict, None, ],
        creator_address: typing.Union[MetaOapg.properties.creator_address, str, ],
        owner_address: typing.Union[MetaOapg.properties.owner_address, str, ],
        property_version: typing.Union[MetaOapg.properties.property_version, str, ],
        collection_name: typing.Union[MetaOapg.properties.collection_name, str, ],
        table_type: typing.Union[MetaOapg.properties.table_type, 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],
    ) -> 'NFTOwnerResponse':
        return super().__new__(
            cls,
            *args,
            last_transaction_version=last_transaction_version,
            amount=amount,
            last_transaction_timestamp=last_transaction_timestamp,
            token_data_id_hash=token_data_id_hash,
            collection_data_id_hash=collection_data_id_hash,
            name=name,
            token_properties=token_properties,
            creator_address=creator_address,
            owner_address=owner_address,
            property_version=property_version,
            collection_name=collection_name,
            table_type=table_type,
            _configuration=_configuration,
            **kwargs,
        )
