# 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.36.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 TransactionLine1(
    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",
            "is_primary",
            "created",
            "related_line",
            "is_offset",
            "avail_balance",
            "available_balance",
            "account_no",
            "uuid",
            "network",
            "dc_sign",
            "account_id",
            "balance",
            "is_gl_acc",
            "meta",
            "currency",
            "updated",
            "seq",
            "tenant",
            "is_fee",
        }
        
        class properties:
            account_id = schemas.StrSchema
            account_no = schemas.StrSchema
            amount = schemas.Int64Schema
            avail_balance = schemas.Int64Schema
            available_balance = schemas.Int64Schema
            balance = schemas.Int64Schema
            created = schemas.DateTimeSchema
            currency = schemas.StrSchema
        
            @staticmethod
            def dc_sign() -> typing.Type['DcSign']:
                return DcSign
            is_fee = schemas.BoolSchema
            is_gl_acc = schemas.BoolSchema
            is_offset = schemas.BoolSchema
            is_primary = schemas.BoolSchema
            
            
            class meta(
                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],
                ) -> 'meta':
                    return super().__new__(
                        cls,
                        *_args,
                        _configuration=_configuration,
                        **kwargs,
                    )
            network = schemas.StrSchema
            related_line = schemas.IntSchema
            seq = schemas.IntSchema
            tenant = schemas.StrSchema
            updated = schemas.DateTimeSchema
            uuid = schemas.UUIDSchema
            __annotations__ = {
                "account_id": account_id,
                "account_no": account_no,
                "amount": amount,
                "avail_balance": avail_balance,
                "available_balance": available_balance,
                "balance": balance,
                "created": created,
                "currency": currency,
                "dc_sign": dc_sign,
                "is_fee": is_fee,
                "is_gl_acc": is_gl_acc,
                "is_offset": is_offset,
                "is_primary": is_primary,
                "meta": meta,
                "network": network,
                "related_line": related_line,
                "seq": seq,
                "tenant": tenant,
                "updated": updated,
                "uuid": uuid,
            }
    
    amount: MetaOapg.properties.amount
    is_primary: MetaOapg.properties.is_primary
    created: MetaOapg.properties.created
    related_line: MetaOapg.properties.related_line
    is_offset: MetaOapg.properties.is_offset
    avail_balance: MetaOapg.properties.avail_balance
    available_balance: MetaOapg.properties.available_balance
    account_no: MetaOapg.properties.account_no
    uuid: MetaOapg.properties.uuid
    network: MetaOapg.properties.network
    dc_sign: 'DcSign'
    account_id: MetaOapg.properties.account_id
    balance: MetaOapg.properties.balance
    is_gl_acc: MetaOapg.properties.is_gl_acc
    meta: MetaOapg.properties.meta
    currency: MetaOapg.properties.currency
    updated: MetaOapg.properties.updated
    seq: MetaOapg.properties.seq
    tenant: MetaOapg.properties.tenant
    is_fee: MetaOapg.properties.is_fee
    
    @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["amount"]) -> MetaOapg.properties.amount: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["avail_balance"]) -> MetaOapg.properties.avail_balance: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["available_balance"]) -> MetaOapg.properties.available_balance: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["balance"]) -> MetaOapg.properties.balance: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["created"]) -> MetaOapg.properties.created: ...
    
    @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["is_fee"]) -> MetaOapg.properties.is_fee: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["is_gl_acc"]) -> MetaOapg.properties.is_gl_acc: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["is_offset"]) -> MetaOapg.properties.is_offset: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["is_primary"]) -> MetaOapg.properties.is_primary: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["meta"]) -> MetaOapg.properties.meta: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["network"]) -> MetaOapg.properties.network: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["related_line"]) -> MetaOapg.properties.related_line: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["seq"]) -> MetaOapg.properties.seq: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["tenant"]) -> MetaOapg.properties.tenant: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["updated"]) -> MetaOapg.properties.updated: ...
    
    @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["account_id", "account_no", "amount", "avail_balance", "available_balance", "balance", "created", "currency", "dc_sign", "is_fee", "is_gl_acc", "is_offset", "is_primary", "meta", "network", "related_line", "seq", "tenant", "updated", "uuid", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["account_id"]) -> MetaOapg.properties.account_id: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["account_no"]) -> MetaOapg.properties.account_no: ...
    
    @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["avail_balance"]) -> MetaOapg.properties.avail_balance: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["available_balance"]) -> MetaOapg.properties.available_balance: ...
    
    @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["created"]) -> MetaOapg.properties.created: ...
    
    @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["is_fee"]) -> MetaOapg.properties.is_fee: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["is_gl_acc"]) -> MetaOapg.properties.is_gl_acc: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["is_offset"]) -> MetaOapg.properties.is_offset: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["is_primary"]) -> MetaOapg.properties.is_primary: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["meta"]) -> MetaOapg.properties.meta: ...
    
    @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["related_line"]) -> MetaOapg.properties.related_line: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["seq"]) -> MetaOapg.properties.seq: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["tenant"]) -> MetaOapg.properties.tenant: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["updated"]) -> MetaOapg.properties.updated: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["uuid"]) -> MetaOapg.properties.uuid: ...
    
    @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["account_id", "account_no", "amount", "avail_balance", "available_balance", "balance", "created", "currency", "dc_sign", "is_fee", "is_gl_acc", "is_offset", "is_primary", "meta", "network", "related_line", "seq", "tenant", "updated", "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, ],
        is_primary: typing.Union[MetaOapg.properties.is_primary, bool, ],
        created: typing.Union[MetaOapg.properties.created, str, datetime, ],
        related_line: typing.Union[MetaOapg.properties.related_line, decimal.Decimal, int, ],
        is_offset: typing.Union[MetaOapg.properties.is_offset, bool, ],
        avail_balance: typing.Union[MetaOapg.properties.avail_balance, decimal.Decimal, int, ],
        available_balance: typing.Union[MetaOapg.properties.available_balance, decimal.Decimal, int, ],
        account_no: typing.Union[MetaOapg.properties.account_no, str, ],
        uuid: typing.Union[MetaOapg.properties.uuid, str, uuid.UUID, ],
        network: typing.Union[MetaOapg.properties.network, str, ],
        dc_sign: 'DcSign',
        account_id: typing.Union[MetaOapg.properties.account_id, str, ],
        balance: typing.Union[MetaOapg.properties.balance, decimal.Decimal, int, ],
        is_gl_acc: typing.Union[MetaOapg.properties.is_gl_acc, bool, ],
        meta: typing.Union[MetaOapg.properties.meta, dict, frozendict.frozendict, None, ],
        currency: typing.Union[MetaOapg.properties.currency, str, ],
        updated: typing.Union[MetaOapg.properties.updated, str, datetime, ],
        seq: typing.Union[MetaOapg.properties.seq, decimal.Decimal, int, ],
        tenant: typing.Union[MetaOapg.properties.tenant, str, ],
        is_fee: typing.Union[MetaOapg.properties.is_fee, bool, ],
        _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],
    ) -> 'TransactionLine1':
        return super().__new__(
            cls,
            *_args,
            amount=amount,
            is_primary=is_primary,
            created=created,
            related_line=related_line,
            is_offset=is_offset,
            avail_balance=avail_balance,
            available_balance=available_balance,
            account_no=account_no,
            uuid=uuid,
            network=network,
            dc_sign=dc_sign,
            account_id=account_id,
            balance=balance,
            is_gl_acc=is_gl_acc,
            meta=meta,
            currency=currency,
            updated=updated,
            seq=seq,
            tenant=tenant,
            is_fee=is_fee,
            _configuration=_configuration,
            **kwargs,
        )

from synctera_client.model.dc_sign import DcSign
