-- | 'Strive.Actions.Comments'
module Strive.Options.Comments
  ( GetActivityCommentsOptions (..),
  )
where

import Data.Aeson (encode)
import Data.ByteString.Char8 (unpack)
import Data.ByteString.Lazy (toStrict)
import Data.Default (Default, def)
import Network.HTTP.Types (QueryLike, toQuery)

-- | 'Strive.Actions.getActivityComments'
data GetActivityCommentsOptions = GetActivityCommentsOptions
  { GetActivityCommentsOptions -> Bool
getActivityCommentsOptions_markdown :: Bool,
    GetActivityCommentsOptions -> Integer
getActivityCommentsOptions_page :: Integer,
    GetActivityCommentsOptions -> Integer
getActivityCommentsOptions_perPage :: Integer
  }
  deriving (Int -> GetActivityCommentsOptions -> ShowS
[GetActivityCommentsOptions] -> ShowS
GetActivityCommentsOptions -> String
(Int -> GetActivityCommentsOptions -> ShowS)
-> (GetActivityCommentsOptions -> String)
-> ([GetActivityCommentsOptions] -> ShowS)
-> Show GetActivityCommentsOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GetActivityCommentsOptions -> ShowS
showsPrec :: Int -> GetActivityCommentsOptions -> ShowS
$cshow :: GetActivityCommentsOptions -> String
show :: GetActivityCommentsOptions -> String
$cshowList :: [GetActivityCommentsOptions] -> ShowS
showList :: [GetActivityCommentsOptions] -> ShowS
Show)

instance Default GetActivityCommentsOptions where
  def :: GetActivityCommentsOptions
def =
    GetActivityCommentsOptions
      { getActivityCommentsOptions_markdown :: Bool
getActivityCommentsOptions_markdown = Bool
False,
        getActivityCommentsOptions_page :: Integer
getActivityCommentsOptions_page = Integer
1,
        getActivityCommentsOptions_perPage :: Integer
getActivityCommentsOptions_perPage = Integer
200
      }

instance QueryLike GetActivityCommentsOptions where
  toQuery :: GetActivityCommentsOptions -> Query
toQuery GetActivityCommentsOptions
options =
    [(String, String)] -> Query
forall a. QueryLike a => a -> Query
toQuery
      [ ( String
"before",
          ByteString -> String
unpack
            (ByteString -> ByteString
toStrict (Bool -> ByteString
forall a. ToJSON a => a -> ByteString
encode (GetActivityCommentsOptions -> Bool
getActivityCommentsOptions_markdown GetActivityCommentsOptions
options)))
        ),
        (String
"page", Integer -> String
forall a. Show a => a -> String
show (GetActivityCommentsOptions -> Integer
getActivityCommentsOptions_page GetActivityCommentsOptions
options)),
        (String
"per_page", Integer -> String
forall a. Show a => a -> String
show (GetActivityCommentsOptions -> Integer
getActivityCommentsOptions_perPage GetActivityCommentsOptions
options))
      ]