from typing import Optional, Any


from ....core.interfaces.dto import Dto
from ....core.interfaces.core import Core


class Wallet[Properties: Any](Core[Properties]):
  strict: Optional[bool]

  account: str
  currency: str

  amount: float
  blocked: Optional[float]
  internal: Optional[float]
  external: Optional[float]

  # Virtual Type
  address: Optional[str]
  private: Optional[str]


# ----------------------------------------
# Data Transfer Object Interface
# ----------------------------------------


class WalletDto[Properties: Any](Dto[Properties]):
  strict: Optional[bool]

  account: str
  currency: str

  amount: float
  blocked: Optional[float]
  internal: Optional[float]
  external: Optional[float]

  # Virtual Type
  address: Optional[str]
  private: Optional[str]
