from typing import Any, Dict, List, Optional, Union
from enum import Enum
from pydantic import BaseModel, Field
from .wallet_transaction_amount import WalletTransactionAmount
from .wallet_transaction_counterparty import WalletTransactionCounterparty
[docs]class WalletTransaction(BaseModel):
    status: str
    """The status of the transaction.
    
    `INITIATED`: This is the initial state of all transactions. It indicates that the transaction has been initiated and is currently being processed.
    
    `EXECUTED`: The transaction has been successfully executed.
    
    `FAILED`: The transaction failed to process successfully. This is a terminal status.
    
    `BLOCKED`: The transaction has been blocked for violating compliance rules. This is a terminal status."""
    created_at: str
    """Timestamp when the transaction was created, in [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format."""
    transaction_id: str
    """A unique ID identifying the transaction"""
    type: str
    """The type of the transaction. The supported transaction types that are returned are:
    `BANK_TRANSFER:` a transaction which credits an e-wallet through an external bank transfer.
    
    `PAYOUT:` a transaction which debits an e-wallet by disbursing funds to a counterparty.
    
    `PIS_PAY_IN:` a payment which credits an e-wallet through Plaid's Payment Initiation Services (PIS) APIs. For more information see the [Payment Initiation endpoints](https://plaid.com/docs/api/products/payment-initiation/).
    
    `REFUND:` a transaction which debits an e-wallet by refunding a previously initated payment made through Plaid's [PIS APIs](https://plaid.com/docs/api/products/payment-initiation/)."""
    reference: str
    """A reference for the transaction"""
    counterparty: WalletTransactionCounterparty
    """An object representing the e-wallet transaction's counterparty"""
    amount: WalletTransactionAmount
    """The amount and currency of a transaction"""
[docs]    def json(self, **kwargs: Any) -> str:
        """Return a json string representation of the object. Takes same keyword arguments as pydantic.BaseModel.json"""
        kwargs.setdefault("by_alias", True)
        return super().json(**kwargs) 
[docs]    def dict(self, **kwargs: Any) -> Dict[str, Any]:
        """Return a dict representation of the object. Takes same keyword arguments as pydantic.BaseModel.dict"""
        kwargs.setdefault("by_alias", True)
        return super().dict(**kwargs) 
[docs]    @classmethod
    def parse_obj(cls, data: Any) -> "WalletTransaction":
        """Parse a dict into the object. Takes same keyword arguments as pydantic.BaseModel.parse_obj"""
        return super().parse_obj(data) 
[docs]    @classmethod
    def parse_raw(cls, b: Union[bytes, str], **kwargs: Any) -> "WalletTransaction":
        """Parse a json string into the object. Takes same keyword arguments as pydantic.BaseModel.parse_raw"""
        return super().parse_raw(b, **kwargs)