{-# LANGUAGE DataKinds        #-}
{-# LANGUAGE DeriveGeneric    #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators    #-}
module Telegram.Bot.API.UpdatingMessages where

import           Data.Aeson
import           Data.Proxy
import           Data.Text                       (Text)
import           GHC.Generics                    (Generic)
import           Servant.API
import           Servant.Client                  (ClientM, client)

import           Telegram.Bot.API.Internal.Utils (gparseJSON, gtoJSON)
import           Telegram.Bot.API.MakingRequests
import           Telegram.Bot.API.Methods
import           Telegram.Bot.API.Types

-- ** 'editMessageText'

type EditMessageText
  = "editMessageText"
  :> ReqBody '[JSON] EditMessageTextRequest
  :> Post '[JSON] (Response Message)

-- | Use this method to send text messages.
-- On success, the sent 'Message' is returned.
editMessageText :: EditMessageTextRequest -> ClientM (Response Message)
editMessageText :: EditMessageTextRequest -> ClientM (Response Message)
editMessageText = Proxy EditMessageText -> Client ClientM EditMessageText
forall api.
HasClient ClientM api =>
Proxy api -> Client ClientM api
client (Proxy EditMessageText
forall k (t :: k). Proxy t
Proxy @EditMessageText)

-- | Request parameters for 'sendMessage'.
data EditMessageTextRequest = EditMessageTextRequest
  { EditMessageTextRequest -> Maybe SomeChatId
editMessageTextChatId                :: Maybe SomeChatId -- ^ Required if 'editMessageTextInlineMessageId' is not specified. Unique identifier for the target chat or username of the target channel (in the format @\@channelusername@).
  , EditMessageTextRequest -> Maybe MessageId
editMessageTextMessageId             :: Maybe MessageId -- ^ Required if 'editMessageTextInlineMessageId' is not specified. Identifier of the sent message.
  , EditMessageTextRequest -> Maybe MessageId
editMessageTextInlineMessageId       :: Maybe MessageId -- ^ Required if 'editMessageTextChatId' and 'editMessageTextMessageId' are not specified. Identifier of the sent message.
  , EditMessageTextRequest -> Text
editMessageTextText                  :: Text -- ^ Text of the message to be sent.
  , EditMessageTextRequest -> Maybe ParseMode
editMessageTextParseMode             :: Maybe ParseMode -- ^ Send 'Markdown' or 'HTML', if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message.
  , EditMessageTextRequest -> Maybe Bool
editMessageTextDisableWebPagePreview :: Maybe Bool -- ^ Disables link previews for links in this message.
  , EditMessageTextRequest -> Maybe SomeReplyMarkup
editMessageTextReplyMarkup           :: Maybe SomeReplyMarkup -- ^ 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 ((forall x. EditMessageTextRequest -> Rep EditMessageTextRequest x)
-> (forall x.
    Rep EditMessageTextRequest x -> EditMessageTextRequest)
-> Generic EditMessageTextRequest
forall x. Rep EditMessageTextRequest x -> EditMessageTextRequest
forall x. EditMessageTextRequest -> Rep EditMessageTextRequest x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep EditMessageTextRequest x -> EditMessageTextRequest
$cfrom :: forall x. EditMessageTextRequest -> Rep EditMessageTextRequest x
Generic)

instance ToJSON   EditMessageTextRequest where toJSON :: EditMessageTextRequest -> Value
toJSON = EditMessageTextRequest -> Value
forall a (d :: Meta) (f :: * -> *).
(Generic a, GToJSON Zero (Rep a), Rep a ~ D1 d f, Datatype d) =>
a -> Value
gtoJSON
instance FromJSON EditMessageTextRequest where parseJSON :: Value -> Parser EditMessageTextRequest
parseJSON = Value -> Parser EditMessageTextRequest
forall a (d :: Meta) (f :: * -> *).
(Generic a, GFromJSON Zero (Rep a), Rep a ~ D1 d f, Datatype d) =>
Value -> Parser a
gparseJSON