module TD.Query.GetChatMessageCalendar
  (GetChatMessageCalendar(..)
  , defaultGetChatMessageCalendar
  ) where

import qualified Data.Aeson as A
import qualified Data.Aeson.Types as AT
import qualified TD.Lib.Internal as I
import qualified TD.Data.MessageTopic as MessageTopic
import qualified TD.Data.SearchMessagesFilter as SearchMessagesFilter

-- | Returns information about the next messages of the specified type in the chat split by days. Returns the results in reverse chronological order. Can return partial result for the last returned day. Behavior of this method depends on the value of the option "utc_time_offset". Returns 'TD.Data.MessageCalendar.MessageCalendar'
data GetChatMessageCalendar
  = GetChatMessageCalendar
    { GetChatMessageCalendar -> Maybe Int
chat_id         :: Maybe Int                                       -- ^ Identifier of the chat in which to return information about messages
    , GetChatMessageCalendar -> Maybe MessageTopic
topic_id        :: Maybe MessageTopic.MessageTopic                 -- ^ Pass topic identifier to get the result only in specific topic; pass null to get the result in all topics; forum topics aren't supported
    , GetChatMessageCalendar -> Maybe SearchMessagesFilter
_filter         :: Maybe SearchMessagesFilter.SearchMessagesFilter -- ^ Filter for message content. Filters searchMessagesFilterEmpty, searchMessagesFilterMention, searchMessagesFilterUnreadMention, and searchMessagesFilterUnreadReaction are unsupported in this function
    , GetChatMessageCalendar -> Maybe Int
from_message_id :: Maybe Int                                       -- ^ The message identifier from which to return information about messages; use 0 to get results from the last message
    }
  deriving (GetChatMessageCalendar -> GetChatMessageCalendar -> Bool
(GetChatMessageCalendar -> GetChatMessageCalendar -> Bool)
-> (GetChatMessageCalendar -> GetChatMessageCalendar -> Bool)
-> Eq GetChatMessageCalendar
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GetChatMessageCalendar -> GetChatMessageCalendar -> Bool
== :: GetChatMessageCalendar -> GetChatMessageCalendar -> Bool
$c/= :: GetChatMessageCalendar -> GetChatMessageCalendar -> Bool
/= :: GetChatMessageCalendar -> GetChatMessageCalendar -> Bool
Eq, Int -> GetChatMessageCalendar -> ShowS
[GetChatMessageCalendar] -> ShowS
GetChatMessageCalendar -> String
(Int -> GetChatMessageCalendar -> ShowS)
-> (GetChatMessageCalendar -> String)
-> ([GetChatMessageCalendar] -> ShowS)
-> Show GetChatMessageCalendar
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GetChatMessageCalendar -> ShowS
showsPrec :: Int -> GetChatMessageCalendar -> ShowS
$cshow :: GetChatMessageCalendar -> String
show :: GetChatMessageCalendar -> String
$cshowList :: [GetChatMessageCalendar] -> ShowS
showList :: [GetChatMessageCalendar] -> ShowS
Show)

instance I.ShortShow GetChatMessageCalendar where
  shortShow :: GetChatMessageCalendar -> String
shortShow
    GetChatMessageCalendar
      { chat_id :: GetChatMessageCalendar -> Maybe Int
chat_id         = Maybe Int
chat_id_
      , topic_id :: GetChatMessageCalendar -> Maybe MessageTopic
topic_id        = Maybe MessageTopic
topic_id_
      , _filter :: GetChatMessageCalendar -> Maybe SearchMessagesFilter
_filter         = Maybe SearchMessagesFilter
_filter_
      , from_message_id :: GetChatMessageCalendar -> Maybe Int
from_message_id = Maybe Int
from_message_id_
      }
        = String
"GetChatMessageCalendar"
          String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
I.cc
          [ String
"chat_id"         String -> Maybe Int -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Int
chat_id_
          , String
"topic_id"        String -> Maybe MessageTopic -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe MessageTopic
topic_id_
          , String
"_filter"         String -> Maybe SearchMessagesFilter -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe SearchMessagesFilter
_filter_
          , String
"from_message_id" String -> Maybe Int -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Int
from_message_id_
          ]

instance AT.ToJSON GetChatMessageCalendar where
  toJSON :: GetChatMessageCalendar -> Value
toJSON
    GetChatMessageCalendar
      { chat_id :: GetChatMessageCalendar -> Maybe Int
chat_id         = Maybe Int
chat_id_
      , topic_id :: GetChatMessageCalendar -> Maybe MessageTopic
topic_id        = Maybe MessageTopic
topic_id_
      , _filter :: GetChatMessageCalendar -> Maybe SearchMessagesFilter
_filter         = Maybe SearchMessagesFilter
_filter_
      , from_message_id :: GetChatMessageCalendar -> Maybe Int
from_message_id = Maybe Int
from_message_id_
      }
        = [Pair] -> Value
A.object
          [ Key
"@type"           Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Text -> Value
AT.String Text
"getChatMessageCalendar"
          , Key
"chat_id"         Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Int
chat_id_
          , Key
"topic_id"        Key -> Maybe MessageTopic -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe MessageTopic
topic_id_
          , Key
"filter"          Key -> Maybe SearchMessagesFilter -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe SearchMessagesFilter
_filter_
          , Key
"from_message_id" Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Int
from_message_id_
          ]

defaultGetChatMessageCalendar :: GetChatMessageCalendar
defaultGetChatMessageCalendar :: GetChatMessageCalendar
defaultGetChatMessageCalendar =
  GetChatMessageCalendar
    { chat_id :: Maybe Int
chat_id         = Maybe Int
forall a. Maybe a
Nothing
    , topic_id :: Maybe MessageTopic
topic_id        = Maybe MessageTopic
forall a. Maybe a
Nothing
    , _filter :: Maybe SearchMessagesFilter
_filter         = Maybe SearchMessagesFilter
forall a. Maybe a
Nothing
    , from_message_id :: Maybe Int
from_message_id = Maybe Int
forall a. Maybe a
Nothing
    }