# coding: utf-8

"""
    Synctera API

    <h2>Let's build something great.</h2><p>Welcome to the official reference documentation for Synctera APIs. Our APIs are the best way to automate your company's banking needs and are designed to be easy to understand and implement.</p><p>We're continuously growing this library and what you see here is just the start, but if you need something specific or have a question, <a class='text-blue-600' href='https://synctera.com/contact' target='_blank' rel='noreferrer'>contact us</a>.</p>  # noqa: E501

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


class ExternalAccountLinkToken(
    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 = {
            "country_codes",
            "language",
            "type",
            "client_name",
        }
        
        class properties:
            client_name = schemas.StrSchema
            
            
            class country_codes(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    min_items = 1
                    
                    
                    class items(
                        schemas.EnumBase,
                        schemas.StrSchema
                    ):
                    
                    
                        class MetaOapg:
                            enum_value_to_name = {
                                "US": "US",
                            }
                        
                        @schemas.classproperty
                        def US(cls):
                            return cls("US")
            
                def __new__(
                    cls,
                    _arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, str, ]], typing.List[typing.Union[MetaOapg.items, str, ]]],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'country_codes':
                    return super().__new__(
                        cls,
                        _arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> MetaOapg.items:
                    return super().__getitem__(i)
            
            
            class language(
                schemas.EnumBase,
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    enum_value_to_name = {
                        "EN": "EN",
                        "FR": "FR",
                        "ES": "ES",
                        "NL": "NL",
                        "DE": "DE",
                    }
                
                @schemas.classproperty
                def EN(cls):
                    return cls("EN")
                
                @schemas.classproperty
                def FR(cls):
                    return cls("FR")
                
                @schemas.classproperty
                def ES(cls):
                    return cls("ES")
                
                @schemas.classproperty
                def NL(cls):
                    return cls("NL")
                
                @schemas.classproperty
                def DE(cls):
                    return cls("DE")
            
            
            class type(
                schemas.EnumBase,
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    enum_value_to_name = {
                        "DEPOSITORY": "DEPOSITORY",
                        "CREDIT": "CREDIT",
                        "INVESTMENT": "INVESTMENT",
                        "MICRO_DEPOSIT": "MICRO_DEPOSIT",
                    }
                
                @schemas.classproperty
                def DEPOSITORY(cls):
                    return cls("DEPOSITORY")
                
                @schemas.classproperty
                def CREDIT(cls):
                    return cls("CREDIT")
                
                @schemas.classproperty
                def INVESTMENT(cls):
                    return cls("INVESTMENT")
                
                @schemas.classproperty
                def MICRO_DEPOSIT(cls):
                    return cls("MICRO_DEPOSIT")
            business_id = schemas.UUIDSchema
            customer_id = schemas.UUIDSchema
            expiration = schemas.DateTimeSchema
            link_customization_name = schemas.StrSchema
            link_token = schemas.StrSchema
            redirect_uri = schemas.StrSchema
            request_id = schemas.StrSchema
            
            
            class sdk_type(
                schemas.EnumBase,
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    enum_value_to_name = {
                        "WEB": "WEB",
                        "IOS": "IOS",
                        "ANDROID": "ANDROID",
                    }
                
                @schemas.classproperty
                def WEB(cls):
                    return cls("WEB")
                
                @schemas.classproperty
                def IOS(cls):
                    return cls("IOS")
                
                @schemas.classproperty
                def ANDROID(cls):
                    return cls("ANDROID")
            vendor_access_token = schemas.StrSchema
            
            
            class vendor_institution_id(
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    min_length = 1
            verify_owner = schemas.BoolSchema
            __annotations__ = {
                "client_name": client_name,
                "country_codes": country_codes,
                "language": language,
                "type": type,
                "business_id": business_id,
                "customer_id": customer_id,
                "expiration": expiration,
                "link_customization_name": link_customization_name,
                "link_token": link_token,
                "redirect_uri": redirect_uri,
                "request_id": request_id,
                "sdk_type": sdk_type,
                "vendor_access_token": vendor_access_token,
                "vendor_institution_id": vendor_institution_id,
                "verify_owner": verify_owner,
            }
    
    country_codes: MetaOapg.properties.country_codes
    language: MetaOapg.properties.language
    type: MetaOapg.properties.type
    client_name: MetaOapg.properties.client_name
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["client_name"]) -> MetaOapg.properties.client_name: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["country_codes"]) -> MetaOapg.properties.country_codes: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["language"]) -> MetaOapg.properties.language: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["type"]) -> MetaOapg.properties.type: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["business_id"]) -> MetaOapg.properties.business_id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["customer_id"]) -> MetaOapg.properties.customer_id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["expiration"]) -> MetaOapg.properties.expiration: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["link_customization_name"]) -> MetaOapg.properties.link_customization_name: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["link_token"]) -> MetaOapg.properties.link_token: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["redirect_uri"]) -> MetaOapg.properties.redirect_uri: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["request_id"]) -> MetaOapg.properties.request_id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["sdk_type"]) -> MetaOapg.properties.sdk_type: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["vendor_access_token"]) -> MetaOapg.properties.vendor_access_token: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["vendor_institution_id"]) -> MetaOapg.properties.vendor_institution_id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["verify_owner"]) -> MetaOapg.properties.verify_owner: ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["client_name", "country_codes", "language", "type", "business_id", "customer_id", "expiration", "link_customization_name", "link_token", "redirect_uri", "request_id", "sdk_type", "vendor_access_token", "vendor_institution_id", "verify_owner", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["client_name"]) -> MetaOapg.properties.client_name: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["country_codes"]) -> MetaOapg.properties.country_codes: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["language"]) -> MetaOapg.properties.language: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["type"]) -> MetaOapg.properties.type: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["business_id"]) -> typing.Union[MetaOapg.properties.business_id, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["customer_id"]) -> typing.Union[MetaOapg.properties.customer_id, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["expiration"]) -> typing.Union[MetaOapg.properties.expiration, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["link_customization_name"]) -> typing.Union[MetaOapg.properties.link_customization_name, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["link_token"]) -> typing.Union[MetaOapg.properties.link_token, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["redirect_uri"]) -> typing.Union[MetaOapg.properties.redirect_uri, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["request_id"]) -> typing.Union[MetaOapg.properties.request_id, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["sdk_type"]) -> typing.Union[MetaOapg.properties.sdk_type, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["vendor_access_token"]) -> typing.Union[MetaOapg.properties.vendor_access_token, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["vendor_institution_id"]) -> typing.Union[MetaOapg.properties.vendor_institution_id, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["verify_owner"]) -> typing.Union[MetaOapg.properties.verify_owner, 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["client_name", "country_codes", "language", "type", "business_id", "customer_id", "expiration", "link_customization_name", "link_token", "redirect_uri", "request_id", "sdk_type", "vendor_access_token", "vendor_institution_id", "verify_owner", ], str]):
        return super().get_item_oapg(name)
    

    def __new__(
        cls,
        *_args: typing.Union[dict, frozendict.frozendict, ],
        country_codes: typing.Union[MetaOapg.properties.country_codes, list, tuple, ],
        language: typing.Union[MetaOapg.properties.language, str, ],
        type: typing.Union[MetaOapg.properties.type, str, ],
        client_name: typing.Union[MetaOapg.properties.client_name, str, ],
        business_id: typing.Union[MetaOapg.properties.business_id, str, uuid.UUID, schemas.Unset] = schemas.unset,
        customer_id: typing.Union[MetaOapg.properties.customer_id, str, uuid.UUID, schemas.Unset] = schemas.unset,
        expiration: typing.Union[MetaOapg.properties.expiration, str, datetime, schemas.Unset] = schemas.unset,
        link_customization_name: typing.Union[MetaOapg.properties.link_customization_name, str, schemas.Unset] = schemas.unset,
        link_token: typing.Union[MetaOapg.properties.link_token, str, schemas.Unset] = schemas.unset,
        redirect_uri: typing.Union[MetaOapg.properties.redirect_uri, str, schemas.Unset] = schemas.unset,
        request_id: typing.Union[MetaOapg.properties.request_id, str, schemas.Unset] = schemas.unset,
        sdk_type: typing.Union[MetaOapg.properties.sdk_type, str, schemas.Unset] = schemas.unset,
        vendor_access_token: typing.Union[MetaOapg.properties.vendor_access_token, str, schemas.Unset] = schemas.unset,
        vendor_institution_id: typing.Union[MetaOapg.properties.vendor_institution_id, str, schemas.Unset] = schemas.unset,
        verify_owner: typing.Union[MetaOapg.properties.verify_owner, bool, 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],
    ) -> 'ExternalAccountLinkToken':
        return super().__new__(
            cls,
            *_args,
            country_codes=country_codes,
            language=language,
            type=type,
            client_name=client_name,
            business_id=business_id,
            customer_id=customer_id,
            expiration=expiration,
            link_customization_name=link_customization_name,
            link_token=link_token,
            redirect_uri=redirect_uri,
            request_id=request_id,
            sdk_type=sdk_type,
            vendor_access_token=vendor_access_token,
            vendor_institution_id=vendor_institution_id,
            verify_owner=verify_owner,
            _configuration=_configuration,
            **kwargs,
        )
