-- | 'Strive.Actions.Clubs'
module Strive.Options.Clubs
  ( GetClubMembersOptions,
    GetClubActivitiesOptions (..),
  )
where

import Data.Default (Default, def)
import Data.Time.Clock (UTCTime)
import Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds)
import Network.HTTP.Types (QueryLike, toQuery)
import Strive.Internal.Options (PaginationOptions)

-- | 'Strive.Actions.getClubMembers'
type GetClubMembersOptions = PaginationOptions

-- | 'Strive.Actions.getClubActivities'
data GetClubActivitiesOptions = GetClubActivitiesOptions
  { GetClubActivitiesOptions -> Maybe UTCTime
getClubActivitiesOptions_before :: Maybe UTCTime,
    GetClubActivitiesOptions -> Maybe UTCTime
getClubActivitiesOptions_after :: Maybe UTCTime,
    GetClubActivitiesOptions -> Integer
getClubActivitiesOptions_page :: Integer,
    GetClubActivitiesOptions -> Integer
getClubActivitiesOptions_perPage :: Integer
  }
  deriving (Int -> GetClubActivitiesOptions -> ShowS
[GetClubActivitiesOptions] -> ShowS
GetClubActivitiesOptions -> String
(Int -> GetClubActivitiesOptions -> ShowS)
-> (GetClubActivitiesOptions -> String)
-> ([GetClubActivitiesOptions] -> ShowS)
-> Show GetClubActivitiesOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GetClubActivitiesOptions -> ShowS
showsPrec :: Int -> GetClubActivitiesOptions -> ShowS
$cshow :: GetClubActivitiesOptions -> String
show :: GetClubActivitiesOptions -> String
$cshowList :: [GetClubActivitiesOptions] -> ShowS
showList :: [GetClubActivitiesOptions] -> ShowS
Show)

instance Default GetClubActivitiesOptions where
  def :: GetClubActivitiesOptions
def =
    GetClubActivitiesOptions
      { getClubActivitiesOptions_before :: Maybe UTCTime
getClubActivitiesOptions_before = Maybe UTCTime
forall a. Maybe a
Nothing,
        getClubActivitiesOptions_after :: Maybe UTCTime
getClubActivitiesOptions_after = Maybe UTCTime
forall a. Maybe a
Nothing,
        getClubActivitiesOptions_page :: Integer
getClubActivitiesOptions_page = Integer
1,
        getClubActivitiesOptions_perPage :: Integer
getClubActivitiesOptions_perPage = Integer
200
      }

instance QueryLike GetClubActivitiesOptions where
  toQuery :: GetClubActivitiesOptions -> Query
toQuery GetClubActivitiesOptions
options =
    [(String, Maybe String)] -> Query
forall a. QueryLike a => a -> Query
toQuery
      [ ( String
"before",
          (UTCTime -> String) -> Maybe UTCTime -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
            (POSIXTime -> String
forall a. Show a => a -> String
show (POSIXTime -> String)
-> (UTCTime -> POSIXTime) -> UTCTime -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> POSIXTime
utcTimeToPOSIXSeconds)
            (GetClubActivitiesOptions -> Maybe UTCTime
getClubActivitiesOptions_before GetClubActivitiesOptions
options)
        ),
        ( String
"after",
          (UTCTime -> String) -> Maybe UTCTime -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
            (POSIXTime -> String
forall a. Show a => a -> String
show (POSIXTime -> String)
-> (UTCTime -> POSIXTime) -> UTCTime -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> POSIXTime
utcTimeToPOSIXSeconds)
            (GetClubActivitiesOptions -> Maybe UTCTime
getClubActivitiesOptions_after GetClubActivitiesOptions
options)
        ),
        (String
"page", String -> Maybe String
forall a. a -> Maybe a
Just (Integer -> String
forall a. Show a => a -> String
show (GetClubActivitiesOptions -> Integer
getClubActivitiesOptions_page GetClubActivitiesOptions
options))),
        (String
"per_page", String -> Maybe String
forall a. a -> Maybe a
Just (Integer -> String
forall a. Show a => a -> String
show (GetClubActivitiesOptions -> Integer
getClubActivitiesOptions_perPage GetClubActivitiesOptions
options)))
      ]