from typing import Optional, List, Any

from ....core.interfaces.dto import Dto
from ....core.enums.status import Status
from ....core.interfaces.core import Core


class User[Properties: Any](Core[Properties]):
  status: Status

  tz: str
  lang: str
  region: str

  email: Optional[str]
  phone: Optional[str]

  secret: Optional[str]

  username: Optional[str]
  password: Optional[str]

  subjects: Optional[List[str]]


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


class UserDto[Properties: Any](Dto[Properties]):
  status: Status

  tz: Optional[str]
  lang: Optional[str]
  region: Optional[str]

  email: Optional[str]
  phone: Optional[str]

  secret: Optional[str]

  username: Optional[str]
  password: Optional[str]

  subjects: Optional[List[str]]
