content: {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE DeriveGeneric #-}
  {-# LANGUAGE TypeApplications #-}
  {-# LANGUAGE TypeOperators #-}
  module Telegram.Bot.API.Methods.SendMediaGroup where
  
  import Data.Aeson (ToJSON (..))
  import Data.Proxy
  import Data.Text (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
  
  -- ** 'sendMediaGroup'
  
  -- | Request parameters for 'sendMediaGroup'.
  data SendMediaGroupRequest = SendMediaGroupRequest
    { sendMediaGroupBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
    , sendMediaGroupChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
    , sendMediaGroupMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
    , sendMediaGroupMedia :: [InputMedia] -- ^ A JSON-serialized array describing messages to be sent, must include 2-10 items. InputMediaAudio, InputMediaDocument, InputMediaPhoto or InputMediaVideo.
    , sendMediaGroupDisableNotification :: Maybe Bool -- ^ Sends the message silently. Users will receive a notification with no sound.
    , sendMediaGroupProtectContent :: Maybe Bool -- ^ Protects the contents of the sent message from forwarding and saving.
    , sendMediaGroupMessageEffectId :: Maybe Text -- ^ Unique identifier of the message effect to be added to the message; for private chats only.
    , sendMediaGroupReplyToMessageId :: Maybe MessageId -- ^ If the message is a reply, ID of the original message.
    , sendMediaGroupReplyParameters :: Maybe ReplyParameters -- ^ Description of the message to reply to.
    , sendMediaGroupReplyMarkup :: Maybe InlineKeyboardMarkup -- ^ Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user.
    }
    deriving Generic
  
  instance ToJSON SendMediaGroupRequest where toJSON = gtoJSON
  
  type SendMediaGroup = "sendMediaGroup"
    :> ReqBody '[JSON] SendMediaGroupRequest
    :> Post '[JSON] (Response [Message])
  
  -- | Use this method to send a group of photos, videos,
  --   documents or audios as an album. Documents
  --   and audio files can be only grouped in an album
  --   with messages of the same type.
  --   On success, an array of Messages that were sent is returned.
  sendMediaGroup :: SendMediaGroupRequest ->  ClientM (Response [Message])
  sendMediaGroup = client (Proxy @SendMediaGroup)
  
  makeDefault ''SendMediaGroupRequest
  