from typing import Optional

from .....core.scope import Scope
from .....core.enums.grant_type import GrantType
from .....enums.auth.auths.auth_source import AuthSource
from .....enums.auth.auths.response_type import ResponseType


class AuthenticationRequest:
  strict: Optional[bool]

  grant_type: GrantType
  response_type: Optional[ResponseType]

  code: Optional[str]
  refresh_token: Optional[str]

  app_id: Optional[str]
  client_id: str
  client_secret: Optional[str]

  domain: Optional[str]
  scopes: Optional[Scope]
  subjects: Optional[str]
  coworkers: Optional[str]

  username: Optional[str]  # username, email or phone
  password: Optional[str]  # client secret, password or otp

  source: Optional[AuthSource]
  state: Optional[str]
