# 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.32.0.dev6
    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 TransactionDirectPostRequest(
    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 = {
            "amount",
            "dc_sign",
            "force_post",
            "reference_id",
            "subtype",
            "effective_date",
            "memo",
            "transaction_time",
            "currency",
            "info_only",
            "type",
            "network",
        }
        
        class properties:
            
            
            class amount(
                schemas.Int64Schema
            ):
            
            
                class MetaOapg:
                    format = 'int64'
                    inclusive_minimum = 0
            currency = schemas.StrSchema
        
            @staticmethod
            def dc_sign() -> typing.Type['DcSign']:
                return DcSign
            effective_date = schemas.DateTimeSchema
            force_post = schemas.BoolSchema
            info_only = schemas.BoolSchema
            memo = schemas.StrSchema
            network = schemas.StrSchema
            reference_id = schemas.StrSchema
            subtype = schemas.StrSchema
            transaction_time = schemas.DateTimeSchema
            type = schemas.StrSchema
            account_alias = schemas.StrSchema
            account_id = schemas.StrSchema
            account_no = schemas.StrSchema
            description = schemas.StrSchema
            
            
            class enhanced_transaction(
                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],
                ) -> 'enhanced_transaction':
                    return super().__new__(
                        cls,
                        *_args,
                        _configuration=_configuration,
                        **kwargs,
                    )
            
            
            class external_data(
                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],
                ) -> 'external_data':
                    return super().__new__(
                        cls,
                        *_args,
                        _configuration=_configuration,
                        **kwargs,
                    )
            offset_description = schemas.StrSchema
            
            
            class risk_info(
                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],
                ) -> 'risk_info':
                    return super().__new__(
                        cls,
                        *_args,
                        _configuration=_configuration,
                        **kwargs,
                    )
            
            
            class user_data(
                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],
                ) -> 'user_data':
                    return super().__new__(
                        cls,
                        *_args,
                        _configuration=_configuration,
                        **kwargs,
                    )
            uuid = schemas.UUIDSchema
            __annotations__ = {
                "amount": amount,
                "currency": currency,
                "dc_sign": dc_sign,
                "effective_date": effective_date,
                "force_post": force_post,
                "info_only": info_only,
                "memo": memo,
                "network": network,
                "reference_id": reference_id,
                "subtype": subtype,
                "transaction_time": transaction_time,
                "type": type,
                "account_alias": account_alias,
                "account_id": account_id,
                "account_no": account_no,
                "description": description,
                "enhanced_transaction": enhanced_transaction,
                "external_data": external_data,
                "offset_description": offset_description,
                "risk_info": risk_info,
                "user_data": user_data,
                "uuid": uuid,
            }
    
    amount: MetaOapg.properties.amount
    dc_sign: 'DcSign'
    force_post: MetaOapg.properties.force_post
    reference_id: MetaOapg.properties.reference_id
    subtype: MetaOapg.properties.subtype
    effective_date: MetaOapg.properties.effective_date
    memo: MetaOapg.properties.memo
    transaction_time: MetaOapg.properties.transaction_time
    currency: MetaOapg.properties.currency
    info_only: MetaOapg.properties.info_only
    type: MetaOapg.properties.type
    network: MetaOapg.properties.network
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["amount"]) -> MetaOapg.properties.amount: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["currency"]) -> MetaOapg.properties.currency: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["dc_sign"]) -> 'DcSign': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["effective_date"]) -> MetaOapg.properties.effective_date: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["force_post"]) -> MetaOapg.properties.force_post: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["info_only"]) -> MetaOapg.properties.info_only: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["memo"]) -> MetaOapg.properties.memo: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["network"]) -> MetaOapg.properties.network: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["reference_id"]) -> MetaOapg.properties.reference_id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["subtype"]) -> MetaOapg.properties.subtype: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["transaction_time"]) -> MetaOapg.properties.transaction_time: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["type"]) -> MetaOapg.properties.type: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["account_alias"]) -> MetaOapg.properties.account_alias: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["account_id"]) -> MetaOapg.properties.account_id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["account_no"]) -> MetaOapg.properties.account_no: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["description"]) -> MetaOapg.properties.description: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["enhanced_transaction"]) -> MetaOapg.properties.enhanced_transaction: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["external_data"]) -> MetaOapg.properties.external_data: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["offset_description"]) -> MetaOapg.properties.offset_description: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["risk_info"]) -> MetaOapg.properties.risk_info: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["user_data"]) -> MetaOapg.properties.user_data: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["uuid"]) -> MetaOapg.properties.uuid: ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["amount", "currency", "dc_sign", "effective_date", "force_post", "info_only", "memo", "network", "reference_id", "subtype", "transaction_time", "type", "account_alias", "account_id", "account_no", "description", "enhanced_transaction", "external_data", "offset_description", "risk_info", "user_data", "uuid", ], 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["currency"]) -> MetaOapg.properties.currency: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["dc_sign"]) -> 'DcSign': ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["effective_date"]) -> MetaOapg.properties.effective_date: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["force_post"]) -> MetaOapg.properties.force_post: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["info_only"]) -> MetaOapg.properties.info_only: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["memo"]) -> MetaOapg.properties.memo: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["network"]) -> MetaOapg.properties.network: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["reference_id"]) -> MetaOapg.properties.reference_id: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["subtype"]) -> MetaOapg.properties.subtype: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["transaction_time"]) -> MetaOapg.properties.transaction_time: ...
    
    @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["account_alias"]) -> typing.Union[MetaOapg.properties.account_alias, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["account_id"]) -> typing.Union[MetaOapg.properties.account_id, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["account_no"]) -> typing.Union[MetaOapg.properties.account_no, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["description"]) -> typing.Union[MetaOapg.properties.description, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["enhanced_transaction"]) -> typing.Union[MetaOapg.properties.enhanced_transaction, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["external_data"]) -> typing.Union[MetaOapg.properties.external_data, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["offset_description"]) -> typing.Union[MetaOapg.properties.offset_description, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["risk_info"]) -> typing.Union[MetaOapg.properties.risk_info, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["user_data"]) -> typing.Union[MetaOapg.properties.user_data, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["uuid"]) -> typing.Union[MetaOapg.properties.uuid, 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["amount", "currency", "dc_sign", "effective_date", "force_post", "info_only", "memo", "network", "reference_id", "subtype", "transaction_time", "type", "account_alias", "account_id", "account_no", "description", "enhanced_transaction", "external_data", "offset_description", "risk_info", "user_data", "uuid", ], str]):
        return super().get_item_oapg(name)
    

    def __new__(
        cls,
        *_args: typing.Union[dict, frozendict.frozendict, ],
        amount: typing.Union[MetaOapg.properties.amount, decimal.Decimal, int, ],
        dc_sign: 'DcSign',
        force_post: typing.Union[MetaOapg.properties.force_post, bool, ],
        reference_id: typing.Union[MetaOapg.properties.reference_id, str, ],
        subtype: typing.Union[MetaOapg.properties.subtype, str, ],
        effective_date: typing.Union[MetaOapg.properties.effective_date, str, datetime, ],
        memo: typing.Union[MetaOapg.properties.memo, str, ],
        transaction_time: typing.Union[MetaOapg.properties.transaction_time, str, datetime, ],
        currency: typing.Union[MetaOapg.properties.currency, str, ],
        info_only: typing.Union[MetaOapg.properties.info_only, bool, ],
        type: typing.Union[MetaOapg.properties.type, str, ],
        network: typing.Union[MetaOapg.properties.network, str, ],
        account_alias: typing.Union[MetaOapg.properties.account_alias, str, schemas.Unset] = schemas.unset,
        account_id: typing.Union[MetaOapg.properties.account_id, str, schemas.Unset] = schemas.unset,
        account_no: typing.Union[MetaOapg.properties.account_no, str, schemas.Unset] = schemas.unset,
        description: typing.Union[MetaOapg.properties.description, str, schemas.Unset] = schemas.unset,
        enhanced_transaction: typing.Union[MetaOapg.properties.enhanced_transaction, dict, frozendict.frozendict, None, schemas.Unset] = schemas.unset,
        external_data: typing.Union[MetaOapg.properties.external_data, dict, frozendict.frozendict, None, schemas.Unset] = schemas.unset,
        offset_description: typing.Union[MetaOapg.properties.offset_description, str, schemas.Unset] = schemas.unset,
        risk_info: typing.Union[MetaOapg.properties.risk_info, dict, frozendict.frozendict, None, schemas.Unset] = schemas.unset,
        user_data: typing.Union[MetaOapg.properties.user_data, dict, frozendict.frozendict, None, schemas.Unset] = schemas.unset,
        uuid: typing.Union[MetaOapg.properties.uuid, str, uuid.UUID, 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],
    ) -> 'TransactionDirectPostRequest':
        return super().__new__(
            cls,
            *_args,
            amount=amount,
            dc_sign=dc_sign,
            force_post=force_post,
            reference_id=reference_id,
            subtype=subtype,
            effective_date=effective_date,
            memo=memo,
            transaction_time=transaction_time,
            currency=currency,
            info_only=info_only,
            type=type,
            network=network,
            account_alias=account_alias,
            account_id=account_id,
            account_no=account_no,
            description=description,
            enhanced_transaction=enhanced_transaction,
            external_data=external_data,
            offset_description=offset_description,
            risk_info=risk_info,
            user_data=user_data,
            uuid=uuid,
            _configuration=_configuration,
            **kwargs,
        )

from synctera_client.model.dc_sign import DcSign
