-- | '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
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetActivityCommentsOptions] -> ShowS
$cshowList :: [GetActivityCommentsOptions] -> ShowS
show :: GetActivityCommentsOptions -> String
$cshow :: GetActivityCommentsOptions -> String
showsPrec :: Int -> GetActivityCommentsOptions -> ShowS
$cshowsPrec :: Int -> 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 =
    forall a. QueryLike a => a -> Query
toQuery
      [ ( String
"before",
          ByteString -> String
unpack
            (ByteString -> ByteString
toStrict (forall a. ToJSON a => a -> ByteString
encode (GetActivityCommentsOptions -> Bool
getActivityCommentsOptions_markdown GetActivityCommentsOptions
options)))
        ),
        (String
"page", forall a. Show a => a -> String
show (GetActivityCommentsOptions -> Integer
getActivityCommentsOptions_page GetActivityCommentsOptions
options)),
        (String
"per_page", forall a. Show a => a -> String
show (GetActivityCommentsOptions -> Integer
getActivityCommentsOptions_perPage GetActivityCommentsOptions
options))
      ]