module TD.Query.EditMessageSchedulingState
  (EditMessageSchedulingState(..)
  , defaultEditMessageSchedulingState
  ) 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.MessageSchedulingState as MessageSchedulingState

-- | Edits the time when a scheduled message will be sent. Scheduling state of all messages in the same album or forwarded together with the message will be also changed. Returns 'TD.Data.Ok.Ok'
data EditMessageSchedulingState
  = EditMessageSchedulingState
    { EditMessageSchedulingState -> Maybe Int
chat_id          :: Maybe Int                                           -- ^ The chat the message belongs to
    , EditMessageSchedulingState -> Maybe Int
message_id       :: Maybe Int                                           -- ^ Identifier of the message. Use messageProperties.can_edit_scheduling_state to check whether the message is suitable
    , EditMessageSchedulingState -> Maybe MessageSchedulingState
scheduling_state :: Maybe MessageSchedulingState.MessageSchedulingState -- ^ The new message scheduling state; pass null to send the message immediately
    }
  deriving (EditMessageSchedulingState -> EditMessageSchedulingState -> Bool
(EditMessageSchedulingState -> EditMessageSchedulingState -> Bool)
-> (EditMessageSchedulingState
    -> EditMessageSchedulingState -> Bool)
-> Eq EditMessageSchedulingState
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EditMessageSchedulingState -> EditMessageSchedulingState -> Bool
== :: EditMessageSchedulingState -> EditMessageSchedulingState -> Bool
$c/= :: EditMessageSchedulingState -> EditMessageSchedulingState -> Bool
/= :: EditMessageSchedulingState -> EditMessageSchedulingState -> Bool
Eq, Int -> EditMessageSchedulingState -> ShowS
[EditMessageSchedulingState] -> ShowS
EditMessageSchedulingState -> String
(Int -> EditMessageSchedulingState -> ShowS)
-> (EditMessageSchedulingState -> String)
-> ([EditMessageSchedulingState] -> ShowS)
-> Show EditMessageSchedulingState
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EditMessageSchedulingState -> ShowS
showsPrec :: Int -> EditMessageSchedulingState -> ShowS
$cshow :: EditMessageSchedulingState -> String
show :: EditMessageSchedulingState -> String
$cshowList :: [EditMessageSchedulingState] -> ShowS
showList :: [EditMessageSchedulingState] -> ShowS
Show)

instance I.ShortShow EditMessageSchedulingState where
  shortShow :: EditMessageSchedulingState -> String
shortShow
    EditMessageSchedulingState
      { chat_id :: EditMessageSchedulingState -> Maybe Int
chat_id          = Maybe Int
chat_id_
      , message_id :: EditMessageSchedulingState -> Maybe Int
message_id       = Maybe Int
message_id_
      , scheduling_state :: EditMessageSchedulingState -> Maybe MessageSchedulingState
scheduling_state = Maybe MessageSchedulingState
scheduling_state_
      }
        = String
"EditMessageSchedulingState"
          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
"message_id"       String -> Maybe Int -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Int
message_id_
          , String
"scheduling_state" String -> Maybe MessageSchedulingState -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe MessageSchedulingState
scheduling_state_
          ]

instance AT.ToJSON EditMessageSchedulingState where
  toJSON :: EditMessageSchedulingState -> Value
toJSON
    EditMessageSchedulingState
      { chat_id :: EditMessageSchedulingState -> Maybe Int
chat_id          = Maybe Int
chat_id_
      , message_id :: EditMessageSchedulingState -> Maybe Int
message_id       = Maybe Int
message_id_
      , scheduling_state :: EditMessageSchedulingState -> Maybe MessageSchedulingState
scheduling_state = Maybe MessageSchedulingState
scheduling_state_
      }
        = [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
"editMessageSchedulingState"
          , 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
"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
message_id_
          , Key
"scheduling_state" Key -> Maybe MessageSchedulingState -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe MessageSchedulingState
scheduling_state_
          ]

defaultEditMessageSchedulingState :: EditMessageSchedulingState
defaultEditMessageSchedulingState :: EditMessageSchedulingState
defaultEditMessageSchedulingState =
  EditMessageSchedulingState
    { chat_id :: Maybe Int
chat_id          = Maybe Int
forall a. Maybe a
Nothing
    , message_id :: Maybe Int
message_id       = Maybe Int
forall a. Maybe a
Nothing
    , scheduling_state :: Maybe MessageSchedulingState
scheduling_state = Maybe MessageSchedulingState
forall a. Maybe a
Nothing
    }