# coding: utf-8

"""
    EVM API

    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)  # noqa: E501

    The version of the OpenAPI document: 2.1
    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_evm_api import schemas  # noqa: F401


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

    Do not edit the class manually.
    """


    class MetaOapg:
        required = {
            "block_number_minted",
            "metadata",
            "syncing",
            "batch_id",
            "resyncing",
            "frozen",
            "token_address",
            "contract_type",
            "createdAt",
            "metadata_description",
            "metadata_name",
            "token_uri",
            "token_hash",
            "token_id",
            "metadata_attributes",
            "is_valid",
            "last_metadata_sync",
            "minter_address",
            "last_token_uri_sync",
            "transaction_minted",
            "updatedAt",
        }
        
        class properties:
            token_id = schemas.StrSchema
            token_address = schemas.StrSchema
            token_uri = schemas.StrSchema
            metadata = schemas.StrSchema
            is_valid = schemas.NumberSchema
            syncing = schemas.NumberSchema
            frozen = schemas.NumberSchema
            resyncing = schemas.NumberSchema
            contract_type = schemas.StrSchema
            token_hash = schemas.StrSchema
            batch_id = schemas.StrSchema
            metadata_name = schemas.StrSchema
            metadata_description = schemas.StrSchema
            metadata_attributes = schemas.StrSchema
            block_number_minted = schemas.StrSchema
            minter_address = schemas.StrSchema
            transaction_minted = schemas.StrSchema
            last_token_uri_sync = schemas.StrSchema
            last_metadata_sync = schemas.StrSchema
            createdAt = schemas.DateTimeSchema
            updatedAt = schemas.DateTimeSchema
            opensea_lookup = schemas.DictSchema
            frozen_log_index = schemas.DictSchema
            imported = schemas.DictSchema
            __annotations__ = {
                "token_id": token_id,
                "token_address": token_address,
                "token_uri": token_uri,
                "metadata": metadata,
                "is_valid": is_valid,
                "syncing": syncing,
                "frozen": frozen,
                "resyncing": resyncing,
                "contract_type": contract_type,
                "token_hash": token_hash,
                "batch_id": batch_id,
                "metadata_name": metadata_name,
                "metadata_description": metadata_description,
                "metadata_attributes": metadata_attributes,
                "block_number_minted": block_number_minted,
                "minter_address": minter_address,
                "transaction_minted": transaction_minted,
                "last_token_uri_sync": last_token_uri_sync,
                "last_metadata_sync": last_metadata_sync,
                "createdAt": createdAt,
                "updatedAt": updatedAt,
                "opensea_lookup": opensea_lookup,
                "frozen_log_index": frozen_log_index,
                "imported": imported,
            }

    
    block_number_minted: MetaOapg.properties.block_number_minted
    metadata: MetaOapg.properties.metadata
    syncing: MetaOapg.properties.syncing
    batch_id: MetaOapg.properties.batch_id
    resyncing: MetaOapg.properties.resyncing
    frozen: MetaOapg.properties.frozen
    token_address: MetaOapg.properties.token_address
    contract_type: MetaOapg.properties.contract_type
    createdAt: MetaOapg.properties.createdAt
    metadata_description: MetaOapg.properties.metadata_description
    metadata_name: MetaOapg.properties.metadata_name
    token_uri: MetaOapg.properties.token_uri
    token_hash: MetaOapg.properties.token_hash
    token_id: MetaOapg.properties.token_id
    metadata_attributes: MetaOapg.properties.metadata_attributes
    is_valid: MetaOapg.properties.is_valid
    last_metadata_sync: MetaOapg.properties.last_metadata_sync
    minter_address: MetaOapg.properties.minter_address
    last_token_uri_sync: MetaOapg.properties.last_token_uri_sync
    transaction_minted: MetaOapg.properties.transaction_minted
    updatedAt: MetaOapg.properties.updatedAt
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["token_id"]) -> MetaOapg.properties.token_id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["token_address"]) -> MetaOapg.properties.token_address: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["token_uri"]) -> MetaOapg.properties.token_uri: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["metadata"]) -> MetaOapg.properties.metadata: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["is_valid"]) -> MetaOapg.properties.is_valid: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["syncing"]) -> MetaOapg.properties.syncing: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["frozen"]) -> MetaOapg.properties.frozen: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["resyncing"]) -> MetaOapg.properties.resyncing: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["contract_type"]) -> MetaOapg.properties.contract_type: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["token_hash"]) -> MetaOapg.properties.token_hash: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["batch_id"]) -> MetaOapg.properties.batch_id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["metadata_name"]) -> MetaOapg.properties.metadata_name: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["metadata_description"]) -> MetaOapg.properties.metadata_description: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["metadata_attributes"]) -> MetaOapg.properties.metadata_attributes: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["block_number_minted"]) -> MetaOapg.properties.block_number_minted: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["minter_address"]) -> MetaOapg.properties.minter_address: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["transaction_minted"]) -> MetaOapg.properties.transaction_minted: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["last_token_uri_sync"]) -> MetaOapg.properties.last_token_uri_sync: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["last_metadata_sync"]) -> MetaOapg.properties.last_metadata_sync: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["createdAt"]) -> MetaOapg.properties.createdAt: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["updatedAt"]) -> MetaOapg.properties.updatedAt: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["opensea_lookup"]) -> MetaOapg.properties.opensea_lookup: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["frozen_log_index"]) -> MetaOapg.properties.frozen_log_index: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["imported"]) -> MetaOapg.properties.imported: ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["token_id", "token_address", "token_uri", "metadata", "is_valid", "syncing", "frozen", "resyncing", "contract_type", "token_hash", "batch_id", "metadata_name", "metadata_description", "metadata_attributes", "block_number_minted", "minter_address", "transaction_minted", "last_token_uri_sync", "last_metadata_sync", "createdAt", "updatedAt", "opensea_lookup", "frozen_log_index", "imported", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["token_id"]) -> MetaOapg.properties.token_id: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["token_address"]) -> MetaOapg.properties.token_address: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["token_uri"]) -> MetaOapg.properties.token_uri: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["metadata"]) -> MetaOapg.properties.metadata: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["is_valid"]) -> MetaOapg.properties.is_valid: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["syncing"]) -> MetaOapg.properties.syncing: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["frozen"]) -> MetaOapg.properties.frozen: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["resyncing"]) -> MetaOapg.properties.resyncing: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["contract_type"]) -> MetaOapg.properties.contract_type: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["token_hash"]) -> MetaOapg.properties.token_hash: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["batch_id"]) -> MetaOapg.properties.batch_id: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["metadata_name"]) -> MetaOapg.properties.metadata_name: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["metadata_description"]) -> MetaOapg.properties.metadata_description: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["metadata_attributes"]) -> MetaOapg.properties.metadata_attributes: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["block_number_minted"]) -> MetaOapg.properties.block_number_minted: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["minter_address"]) -> MetaOapg.properties.minter_address: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["transaction_minted"]) -> MetaOapg.properties.transaction_minted: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["last_token_uri_sync"]) -> MetaOapg.properties.last_token_uri_sync: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["last_metadata_sync"]) -> MetaOapg.properties.last_metadata_sync: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["createdAt"]) -> MetaOapg.properties.createdAt: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["updatedAt"]) -> MetaOapg.properties.updatedAt: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["opensea_lookup"]) -> typing.Union[MetaOapg.properties.opensea_lookup, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["frozen_log_index"]) -> typing.Union[MetaOapg.properties.frozen_log_index, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["imported"]) -> typing.Union[MetaOapg.properties.imported, schemas.Unset]: ...
    
    @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["token_id", "token_address", "token_uri", "metadata", "is_valid", "syncing", "frozen", "resyncing", "contract_type", "token_hash", "batch_id", "metadata_name", "metadata_description", "metadata_attributes", "block_number_minted", "minter_address", "transaction_minted", "last_token_uri_sync", "last_metadata_sync", "createdAt", "updatedAt", "opensea_lookup", "frozen_log_index", "imported", ], str]):
        return super().get_item_oapg(name)
    

    def __new__(
        cls,
        *_args: typing.Union[dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, bool, None, list, tuple, bytes, io.FileIO, io.BufferedReader, ],
        block_number_minted: typing.Union[MetaOapg.properties.block_number_minted, str, ],
        metadata: typing.Union[MetaOapg.properties.metadata, str, ],
        syncing: typing.Union[MetaOapg.properties.syncing, decimal.Decimal, int, float, ],
        batch_id: typing.Union[MetaOapg.properties.batch_id, str, ],
        resyncing: typing.Union[MetaOapg.properties.resyncing, decimal.Decimal, int, float, ],
        frozen: typing.Union[MetaOapg.properties.frozen, decimal.Decimal, int, float, ],
        token_address: typing.Union[MetaOapg.properties.token_address, str, ],
        contract_type: typing.Union[MetaOapg.properties.contract_type, str, ],
        createdAt: typing.Union[MetaOapg.properties.createdAt, str, datetime, ],
        metadata_description: typing.Union[MetaOapg.properties.metadata_description, str, ],
        metadata_name: typing.Union[MetaOapg.properties.metadata_name, str, ],
        token_uri: typing.Union[MetaOapg.properties.token_uri, str, ],
        token_hash: typing.Union[MetaOapg.properties.token_hash, str, ],
        token_id: typing.Union[MetaOapg.properties.token_id, str, ],
        metadata_attributes: typing.Union[MetaOapg.properties.metadata_attributes, str, ],
        is_valid: typing.Union[MetaOapg.properties.is_valid, decimal.Decimal, int, float, ],
        last_metadata_sync: typing.Union[MetaOapg.properties.last_metadata_sync, str, ],
        minter_address: typing.Union[MetaOapg.properties.minter_address, str, ],
        last_token_uri_sync: typing.Union[MetaOapg.properties.last_token_uri_sync, str, ],
        transaction_minted: typing.Union[MetaOapg.properties.transaction_minted, str, ],
        updatedAt: typing.Union[MetaOapg.properties.updatedAt, str, datetime, ],
        opensea_lookup: typing.Union[MetaOapg.properties.opensea_lookup, dict, frozendict.frozendict, schemas.Unset] = schemas.unset,
        frozen_log_index: typing.Union[MetaOapg.properties.frozen_log_index, dict, frozendict.frozendict, schemas.Unset] = schemas.unset,
        imported: typing.Union[MetaOapg.properties.imported, dict, frozendict.frozendict, schemas.Unset] = schemas.unset,
        _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],
    ) -> 'NftMetadata':
        return super().__new__(
            cls,
            *_args,
            block_number_minted=block_number_minted,
            metadata=metadata,
            syncing=syncing,
            batch_id=batch_id,
            resyncing=resyncing,
            frozen=frozen,
            token_address=token_address,
            contract_type=contract_type,
            createdAt=createdAt,
            metadata_description=metadata_description,
            metadata_name=metadata_name,
            token_uri=token_uri,
            token_hash=token_hash,
            token_id=token_id,
            metadata_attributes=metadata_attributes,
            is_valid=is_valid,
            last_metadata_sync=last_metadata_sync,
            minter_address=minter_address,
            last_token_uri_sync=last_token_uri_sync,
            transaction_minted=transaction_minted,
            updatedAt=updatedAt,
            opensea_lookup=opensea_lookup,
            frozen_log_index=frozen_log_index,
            imported=imported,
            _configuration=_configuration,
            **kwargs,
        )
