module TD.Query.SetChatDirectMessagesGroup
  (SetChatDirectMessagesGroup(..)
  , defaultSetChatDirectMessagesGroup
  ) where

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

-- | Changes direct messages group settings for a channel chat; requires owner privileges in the chat. Returns 'TD.Data.Ok.Ok'
data SetChatDirectMessagesGroup
  = SetChatDirectMessagesGroup
    { SetChatDirectMessagesGroup -> Maybe Int
chat_id                 :: Maybe Int  -- ^ Identifier of the channel chat
    , SetChatDirectMessagesGroup -> Maybe Bool
is_enabled              :: Maybe Bool -- ^ Pass true if the direct messages group is enabled for the channel chat; pass false otherwise
    ,  :: Maybe Int  -- ^ The new number of Telegram Stars that must be paid for each message that is sent to the direct messages chat unless the sender is an administrator of the channel chat; 0-getOption("paid_message_star_count_max"). The channel will receive getOption("paid_message_earnings_per_mille") Telegram Stars for each 1000 Telegram Stars paid for message sending. Requires supergroupFullInfo.can_enable_paid_messages for positive amounts
    }
  deriving (SetChatDirectMessagesGroup -> SetChatDirectMessagesGroup -> Bool
(SetChatDirectMessagesGroup -> SetChatDirectMessagesGroup -> Bool)
-> (SetChatDirectMessagesGroup
    -> SetChatDirectMessagesGroup -> Bool)
-> Eq SetChatDirectMessagesGroup
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SetChatDirectMessagesGroup -> SetChatDirectMessagesGroup -> Bool
== :: SetChatDirectMessagesGroup -> SetChatDirectMessagesGroup -> Bool
$c/= :: SetChatDirectMessagesGroup -> SetChatDirectMessagesGroup -> Bool
/= :: SetChatDirectMessagesGroup -> SetChatDirectMessagesGroup -> Bool
Eq, Int -> SetChatDirectMessagesGroup -> ShowS
[SetChatDirectMessagesGroup] -> ShowS
SetChatDirectMessagesGroup -> String
(Int -> SetChatDirectMessagesGroup -> ShowS)
-> (SetChatDirectMessagesGroup -> String)
-> ([SetChatDirectMessagesGroup] -> ShowS)
-> Show SetChatDirectMessagesGroup
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SetChatDirectMessagesGroup -> ShowS
showsPrec :: Int -> SetChatDirectMessagesGroup -> ShowS
$cshow :: SetChatDirectMessagesGroup -> String
show :: SetChatDirectMessagesGroup -> String
$cshowList :: [SetChatDirectMessagesGroup] -> ShowS
showList :: [SetChatDirectMessagesGroup] -> ShowS
Show)

instance I.ShortShow SetChatDirectMessagesGroup where
  shortShow :: SetChatDirectMessagesGroup -> String
shortShow
    SetChatDirectMessagesGroup
      { chat_id :: SetChatDirectMessagesGroup -> Maybe Int
chat_id                 = Maybe Int
chat_id_
      , is_enabled :: SetChatDirectMessagesGroup -> Maybe Bool
is_enabled              = Maybe Bool
is_enabled_
      , paid_message_star_count :: SetChatDirectMessagesGroup -> Maybe Int
paid_message_star_count = Maybe Int
paid_message_star_count_
      }
        = String
"SetChatDirectMessagesGroup"
          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
"is_enabled"              String -> Maybe Bool -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Bool
is_enabled_
          , String
"paid_message_star_count" String -> Maybe Int -> String
forall a. ShortShow a => String -> Maybe a -> String
`I.p` Maybe Int
paid_message_star_count_
          ]

instance AT.ToJSON SetChatDirectMessagesGroup where
  toJSON :: SetChatDirectMessagesGroup -> Value
toJSON
    SetChatDirectMessagesGroup
      { chat_id :: SetChatDirectMessagesGroup -> Maybe Int
chat_id                 = Maybe Int
chat_id_
      , is_enabled :: SetChatDirectMessagesGroup -> Maybe Bool
is_enabled              = Maybe Bool
is_enabled_
      , paid_message_star_count :: SetChatDirectMessagesGroup -> Maybe Int
paid_message_star_count = Maybe Int
paid_message_star_count_
      }
        = [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
"setChatDirectMessagesGroup"
          , 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
"is_enabled"              Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Bool
is_enabled_
          , Key
"paid_message_star_count" Key -> Maybe Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
A..= Maybe Int
paid_message_star_count_
          ]

defaultSetChatDirectMessagesGroup :: SetChatDirectMessagesGroup
defaultSetChatDirectMessagesGroup :: SetChatDirectMessagesGroup
defaultSetChatDirectMessagesGroup =
  SetChatDirectMessagesGroup
    { chat_id :: Maybe Int
chat_id                 = Maybe Int
forall a. Maybe a
Nothing
    , is_enabled :: Maybe Bool
is_enabled              = Maybe Bool
forall a. Maybe a
Nothing
    , paid_message_star_count :: Maybe Int
paid_message_star_count = Maybe Int
forall a. Maybe a
Nothing
    }