# 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 NativeBalances(
    schemas.ListSchema
):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """


    class MetaOapg:
        
        
        class items(
            schemas.DictSchema
        ):
        
        
            class MetaOapg:
                required = {
                    "total_balance",
                    "wallet_balances",
                    "chain",
                    "chain_id",
                    "block_timestamp",
                    "block_number",
                    "total_balance_formatted",
                }
                
                class properties:
                    chain = schemas.StrSchema
                    chain_id = schemas.StrSchema
                    total_balance = schemas.StrSchema
                    block_number = schemas.StrSchema
                    block_timestamp = schemas.StrSchema
                    total_balance_formatted = schemas.StrSchema
                    
                    
                    class wallet_balances(
                        schemas.ListSchema
                    ):
                    
                    
                        class MetaOapg:
                            
                            
                            class items(
                                schemas.DictSchema
                            ):
                            
                            
                                class MetaOapg:
                                    required = {
                                        "address",
                                        "balance",
                                        "balance_formatted",
                                    }
                                    
                                    class properties:
                                        address = schemas.StrSchema
                                        balance = schemas.StrSchema
                                        balance_formatted = schemas.StrSchema
                                        __annotations__ = {
                                            "address": address,
                                            "balance": balance,
                                            "balance_formatted": balance_formatted,
                                        }
                                
                                address: MetaOapg.properties.address
                                balance: MetaOapg.properties.balance
                                balance_formatted: MetaOapg.properties.balance_formatted
                                
                                @typing.overload
                                def __getitem__(self, name: typing_extensions.Literal["address"]) -> MetaOapg.properties.address: ...
                                
                                @typing.overload
                                def __getitem__(self, name: typing_extensions.Literal["balance"]) -> MetaOapg.properties.balance: ...
                                
                                @typing.overload
                                def __getitem__(self, name: typing_extensions.Literal["balance_formatted"]) -> MetaOapg.properties.balance_formatted: ...
                                
                                @typing.overload
                                def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
                                
                                def __getitem__(self, name: typing.Union[typing_extensions.Literal["address", "balance", "balance_formatted", ], str]):
                                    # dict_instance[name] accessor
                                    return super().__getitem__(name)
                                
                                
                                @typing.overload
                                def get_item_oapg(self, name: typing_extensions.Literal["address"]) -> MetaOapg.properties.address: ...
                                
                                @typing.overload
                                def get_item_oapg(self, name: typing_extensions.Literal["balance"]) -> MetaOapg.properties.balance: ...
                                
                                @typing.overload
                                def get_item_oapg(self, name: typing_extensions.Literal["balance_formatted"]) -> MetaOapg.properties.balance_formatted: ...
                                
                                @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["address", "balance", "balance_formatted", ], str]):
                                    return super().get_item_oapg(name)
                                
                            
                                def __new__(
                                    cls,
                                    *args: typing.Union[dict, frozendict.frozendict, ],
                                    address: typing.Union[MetaOapg.properties.address, str, ],
                                    balance: typing.Union[MetaOapg.properties.balance, str, ],
                                    balance_formatted: typing.Union[MetaOapg.properties.balance_formatted, 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],
                                ) -> 'items':
                                    return super().__new__(
                                        cls,
                                        *args,
                                        address=address,
                                        balance=balance,
                                        balance_formatted=balance_formatted,
                                        _configuration=_configuration,
                                        **kwargs,
                                    )
                    
                        def __new__(
                            cls,
                            arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, dict, frozendict.frozendict, ]], typing.List[typing.Union[MetaOapg.items, dict, frozendict.frozendict, ]]],
                            _configuration: typing.Optional[schemas.Configuration] = None,
                        ) -> 'wallet_balances':
                            return super().__new__(
                                cls,
                                arg,
                                _configuration=_configuration,
                            )
                    
                        def __getitem__(self, i: int) -> MetaOapg.items:
                            return super().__getitem__(i)
                    __annotations__ = {
                        "chain": chain,
                        "chain_id": chain_id,
                        "total_balance": total_balance,
                        "block_number": block_number,
                        "block_timestamp": block_timestamp,
                        "total_balance_formatted": total_balance_formatted,
                        "wallet_balances": wallet_balances,
                    }
            
            total_balance: MetaOapg.properties.total_balance
            wallet_balances: MetaOapg.properties.wallet_balances
            chain: MetaOapg.properties.chain
            chain_id: MetaOapg.properties.chain_id
            block_timestamp: MetaOapg.properties.block_timestamp
            block_number: MetaOapg.properties.block_number
            total_balance_formatted: MetaOapg.properties.total_balance_formatted
            
            @typing.overload
            def __getitem__(self, name: typing_extensions.Literal["chain"]) -> MetaOapg.properties.chain: ...
            
            @typing.overload
            def __getitem__(self, name: typing_extensions.Literal["chain_id"]) -> MetaOapg.properties.chain_id: ...
            
            @typing.overload
            def __getitem__(self, name: typing_extensions.Literal["total_balance"]) -> MetaOapg.properties.total_balance: ...
            
            @typing.overload
            def __getitem__(self, name: typing_extensions.Literal["block_number"]) -> MetaOapg.properties.block_number: ...
            
            @typing.overload
            def __getitem__(self, name: typing_extensions.Literal["block_timestamp"]) -> MetaOapg.properties.block_timestamp: ...
            
            @typing.overload
            def __getitem__(self, name: typing_extensions.Literal["total_balance_formatted"]) -> MetaOapg.properties.total_balance_formatted: ...
            
            @typing.overload
            def __getitem__(self, name: typing_extensions.Literal["wallet_balances"]) -> MetaOapg.properties.wallet_balances: ...
            
            @typing.overload
            def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
            
            def __getitem__(self, name: typing.Union[typing_extensions.Literal["chain", "chain_id", "total_balance", "block_number", "block_timestamp", "total_balance_formatted", "wallet_balances", ], str]):
                # dict_instance[name] accessor
                return super().__getitem__(name)
            
            
            @typing.overload
            def get_item_oapg(self, name: typing_extensions.Literal["chain"]) -> MetaOapg.properties.chain: ...
            
            @typing.overload
            def get_item_oapg(self, name: typing_extensions.Literal["chain_id"]) -> MetaOapg.properties.chain_id: ...
            
            @typing.overload
            def get_item_oapg(self, name: typing_extensions.Literal["total_balance"]) -> MetaOapg.properties.total_balance: ...
            
            @typing.overload
            def get_item_oapg(self, name: typing_extensions.Literal["block_number"]) -> MetaOapg.properties.block_number: ...
            
            @typing.overload
            def get_item_oapg(self, name: typing_extensions.Literal["block_timestamp"]) -> MetaOapg.properties.block_timestamp: ...
            
            @typing.overload
            def get_item_oapg(self, name: typing_extensions.Literal["total_balance_formatted"]) -> MetaOapg.properties.total_balance_formatted: ...
            
            @typing.overload
            def get_item_oapg(self, name: typing_extensions.Literal["wallet_balances"]) -> MetaOapg.properties.wallet_balances: ...
            
            @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["chain", "chain_id", "total_balance", "block_number", "block_timestamp", "total_balance_formatted", "wallet_balances", ], str]):
                return super().get_item_oapg(name)
            
        
            def __new__(
                cls,
                *args: typing.Union[dict, frozendict.frozendict, ],
                total_balance: typing.Union[MetaOapg.properties.total_balance, str, ],
                wallet_balances: typing.Union[MetaOapg.properties.wallet_balances, list, tuple, ],
                chain: typing.Union[MetaOapg.properties.chain, str, ],
                chain_id: typing.Union[MetaOapg.properties.chain_id, str, ],
                block_timestamp: typing.Union[MetaOapg.properties.block_timestamp, str, ],
                block_number: typing.Union[MetaOapg.properties.block_number, str, ],
                total_balance_formatted: typing.Union[MetaOapg.properties.total_balance_formatted, 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],
            ) -> 'items':
                return super().__new__(
                    cls,
                    *args,
                    total_balance=total_balance,
                    wallet_balances=wallet_balances,
                    chain=chain,
                    chain_id=chain_id,
                    block_timestamp=block_timestamp,
                    block_number=block_number,
                    total_balance_formatted=total_balance_formatted,
                    _configuration=_configuration,
                    **kwargs,
                )

    def __new__(
        cls,
        arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, dict, frozendict.frozendict, ]], typing.List[typing.Union[MetaOapg.items, dict, frozendict.frozendict, ]]],
        _configuration: typing.Optional[schemas.Configuration] = None,
    ) -> 'NativeBalances':
        return super().__new__(
            cls,
            arg,
            _configuration=_configuration,
        )

    def __getitem__(self, i: int) -> MetaOapg.items:
        return super().__getitem__(i)
