from typing import Optional, Any
from datetime import datetime

from ....core.enums.state import State
from ....core.interfaces.dto import Dto
from ....core.enums.gender import Gender
from ....core.enums.status import Status
from ....core.interfaces.core import Core
from ....enums.logistic.drivers import DriverType


class Driver[Properties: Any](Core[Properties]):
  type: DriverType
  gender: Gender

  state: State
  status: Status

  license: str

  verified_at: Optional[datetime]
  verified_by: Optional[str]
  verified_in: Optional[str]

  expiration_date: datetime


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


class DriverDto[Properties: Any](Dto[Properties]):
  type: DriverType
  gender: Gender

  state: State
  status: Status

  license: str

  verified_at: Optional[datetime]
  verified_by: Optional[str]
  verified_in: Optional[str]

  expiration_date: datetime
