content: {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE DeriveGeneric #-}
  {-# LANGUAGE TypeApplications #-}
  {-# LANGUAGE TypeOperators #-}
  module Telegram.Bot.API.Methods.CreateChatInviteLink where
  
  import Data.Aeson (FromJSON (..), ToJSON (..))
  import Data.Proxy
  import Data.Text
  import GHC.Generics (Generic)
  import Servant.API
  import Servant.Client hiding (Response)
  
  import Telegram.Bot.API.Internal.Utils
  import Telegram.Bot.API.MakingRequests
  import Telegram.Bot.API.Types
  import Telegram.Bot.API.Internal.TH
  
  -- ** 'createChatInviteLink'
  
  -- | Request parameters for 'createChatInviteLink'.
  data CreateChatInviteLinkRequest = CreateChatInviteLinkRequest
    { createChatInviteLinkChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername)
    , createChatInviteLinkName :: Maybe Text -- ^ Invite link name; 0-32 characters
    , createChatInviteLinkExpireDate :: Maybe Integer -- ^ Point in time (Unix timestamp) when the link will expire
    , createChatInviteLinkMemberLimit :: Maybe Int -- ^ Maximum number of users that can be members of the chat simultaneously after joining the chat via this invite link; 1-99999
    , createChatInviteLinkCreatesJoinRequest :: Maybe Bool -- ^ True, if users joining the chat via the link need to be approved by chat administrators. If True, member_limit can't be specified
    }
    deriving Generic
  
  instance ToJSON   CreateChatInviteLinkRequest where toJSON = gtoJSON
  instance FromJSON CreateChatInviteLinkRequest where parseJSON = gparseJSON
  
  type CreateChatInviteLink = "createChatInviteLink"
    :> ReqBody '[JSON] CreateChatInviteLinkRequest
    :> Post '[JSON] (Response ChatInviteLink)
  
  -- | Use this method to create an additional
  --   invite link for a chat. The bot must be
  --   an administrator in the chat for this to
  --   work and must have the appropriate administrator
  --   rights. The link can be revoked using the
  --   method revokeChatInviteLink.
  --   Returns the new invite link as ChatInviteLink object.
  createChatInviteLink :: CreateChatInviteLinkRequest ->  ClientM (Response ChatInviteLink)
  createChatInviteLink = client (Proxy @CreateChatInviteLink)
  
  makeDefault ''CreateChatInviteLinkRequest
  