{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Web.Telegram.Types.Internal.User
  ( User (..),
  )
where

import Data.Aeson
import Data.Text (Text)
import Deriving.Aeson
import Servant.API
import Web.Telegram.Types.Internal.Utils

-- | A Telegram user or bot.
data User
  = User
      { -- | Unique identifier for this user or bot
        userId :: Int,
        -- | True, if this user is a bot
        isBot :: Bool,
        -- | User's or bot's first name
        firstName :: Text,
        -- | User's or bot's last name
        lastName :: Maybe Text,
        -- | User's or bot's username
        username :: Maybe Text,
        -- | [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag) of the user's language
        languageCode :: Maybe Text,
        -- | True, if the bot can be invited to groups. Returned only in getMe
        canJoinGroups :: Maybe Bool,
        -- | True, if privacy mode is disabled for the bot. Returned only in getMe
        canReadAllGroupMessages :: Maybe Bool,
        -- | True, if the bot supports inline queries. Returned only in getMe.
        supportsInlineQueries :: Maybe Bool
      }
  deriving (Show, Eq, Generic, Default)
  deriving
    (FromJSON, ToJSON)
    via PrefixedSnake' "user" User
  deriving (ToHttpApiData) via Serialize User