-- | 'Strive.Actions.Activities'
module Strive.Options.Activities
  ( CreateActivityOptions(..)
  , GetActivityOptions(..)
  , UpdateActivityOptions(..)
  , GetCurrentActivitiesOptions(..)
  , GetRelatedActivitiesOptions
  , GetFeedOptions
  ) where

import Data.Aeson (encode)
import Data.ByteString.Char8 (unpack)
import Data.ByteString.Lazy (toStrict)
import Data.Default (Default, def)
import Data.Time.Clock (UTCTime)
import Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds)
import Network.HTTP.Types (QueryLike, toQuery)
import Strive.Enums (ActivityType)
import Strive.Internal.Options (PaginationOptions)

-- | 'Strive.Actions.CreateActivity'
data CreateActivityOptions = CreateActivityOptions
  { CreateActivityOptions -> Maybe String
createActivityOptions_description :: Maybe String
  , CreateActivityOptions -> Maybe Double
createActivityOptions_distance :: Maybe Double
  }
  deriving Int -> CreateActivityOptions -> ShowS
[CreateActivityOptions] -> ShowS
CreateActivityOptions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateActivityOptions] -> ShowS
$cshowList :: [CreateActivityOptions] -> ShowS
show :: CreateActivityOptions -> String
$cshow :: CreateActivityOptions -> String
showsPrec :: Int -> CreateActivityOptions -> ShowS
$cshowsPrec :: Int -> CreateActivityOptions -> ShowS
Show

instance Default CreateActivityOptions where
  def :: CreateActivityOptions
def = CreateActivityOptions
    { createActivityOptions_description :: Maybe String
createActivityOptions_description = forall a. Maybe a
Nothing
    , createActivityOptions_distance :: Maybe Double
createActivityOptions_distance = forall a. Maybe a
Nothing
    }

instance QueryLike CreateActivityOptions where
  toQuery :: CreateActivityOptions -> Query
toQuery CreateActivityOptions
options = forall a. QueryLike a => a -> Query
toQuery
    [ (String
"description", CreateActivityOptions -> Maybe String
createActivityOptions_description CreateActivityOptions
options)
    , (String
"distance", forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a. Show a => a -> String
show (CreateActivityOptions -> Maybe Double
createActivityOptions_distance CreateActivityOptions
options))
    ]

-- | 'Strive.Actions.GetActivity'
data GetActivityOptions = GetActivityOptions
  { GetActivityOptions -> Bool
getActivityOptions_allEfforts :: Bool
  }
  deriving Int -> GetActivityOptions -> ShowS
[GetActivityOptions] -> ShowS
GetActivityOptions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetActivityOptions] -> ShowS
$cshowList :: [GetActivityOptions] -> ShowS
show :: GetActivityOptions -> String
$cshow :: GetActivityOptions -> String
showsPrec :: Int -> GetActivityOptions -> ShowS
$cshowsPrec :: Int -> GetActivityOptions -> ShowS
Show

instance Default GetActivityOptions where
  def :: GetActivityOptions
def = GetActivityOptions { getActivityOptions_allEfforts :: Bool
getActivityOptions_allEfforts = Bool
False }

instance QueryLike GetActivityOptions where
  toQuery :: GetActivityOptions -> Query
toQuery GetActivityOptions
options = forall a. QueryLike a => a -> Query
toQuery
    [ ( String
"approval_prompt"
      , ByteString -> String
unpack (ByteString -> ByteString
toStrict (forall a. ToJSON a => a -> ByteString
encode (GetActivityOptions -> Bool
getActivityOptions_allEfforts GetActivityOptions
options)))
      )
    ]

-- | 'Strive.Actions.UpdateActivity'
data UpdateActivityOptions = UpdateActivityOptions
  { UpdateActivityOptions -> Maybe String
updateActivityOptions_name :: Maybe String
  , UpdateActivityOptions -> Maybe ActivityType
updateActivityOptions_type :: Maybe ActivityType
  , UpdateActivityOptions -> Maybe Bool
updateActivityOptions_private :: Maybe Bool
  , UpdateActivityOptions -> Maybe Bool
updateActivityOptions_commute :: Maybe Bool
  , UpdateActivityOptions -> Maybe Bool
updateActivityOptions_trainer :: Maybe Bool
  , UpdateActivityOptions -> Maybe String
updateActivityOptions_gearId :: Maybe String
  , UpdateActivityOptions -> Maybe String
updateActivityOptions_description :: Maybe String
  }
  deriving Int -> UpdateActivityOptions -> ShowS
[UpdateActivityOptions] -> ShowS
UpdateActivityOptions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateActivityOptions] -> ShowS
$cshowList :: [UpdateActivityOptions] -> ShowS
show :: UpdateActivityOptions -> String
$cshow :: UpdateActivityOptions -> String
showsPrec :: Int -> UpdateActivityOptions -> ShowS
$cshowsPrec :: Int -> UpdateActivityOptions -> ShowS
Show

instance Default UpdateActivityOptions where
  def :: UpdateActivityOptions
def = UpdateActivityOptions
    { updateActivityOptions_name :: Maybe String
updateActivityOptions_name = forall a. Maybe a
Nothing
    , updateActivityOptions_type :: Maybe ActivityType
updateActivityOptions_type = forall a. Maybe a
Nothing
    , updateActivityOptions_private :: Maybe Bool
updateActivityOptions_private = forall a. Maybe a
Nothing
    , updateActivityOptions_commute :: Maybe Bool
updateActivityOptions_commute = forall a. Maybe a
Nothing
    , updateActivityOptions_trainer :: Maybe Bool
updateActivityOptions_trainer = forall a. Maybe a
Nothing
    , updateActivityOptions_gearId :: Maybe String
updateActivityOptions_gearId = forall a. Maybe a
Nothing
    , updateActivityOptions_description :: Maybe String
updateActivityOptions_description = forall a. Maybe a
Nothing
    }

instance QueryLike UpdateActivityOptions where
  toQuery :: UpdateActivityOptions -> Query
toQuery UpdateActivityOptions
options = forall a. QueryLike a => a -> Query
toQuery
    [ (String
"name", UpdateActivityOptions -> Maybe String
updateActivityOptions_name UpdateActivityOptions
options)
    , (String
"type", forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a. Show a => a -> String
show (UpdateActivityOptions -> Maybe ActivityType
updateActivityOptions_type UpdateActivityOptions
options))
    , ( String
"private"
      , forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
        (ByteString -> String
unpack forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
toStrict forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. ToJSON a => a -> ByteString
encode)
        (UpdateActivityOptions -> Maybe Bool
updateActivityOptions_private UpdateActivityOptions
options)
      )
    , ( String
"commute"
      , forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
        (ByteString -> String
unpack forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
toStrict forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. ToJSON a => a -> ByteString
encode)
        (UpdateActivityOptions -> Maybe Bool
updateActivityOptions_commute UpdateActivityOptions
options)
      )
    , ( String
"trainer"
      , forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
        (ByteString -> String
unpack forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
toStrict forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. ToJSON a => a -> ByteString
encode)
        (UpdateActivityOptions -> Maybe Bool
updateActivityOptions_trainer UpdateActivityOptions
options)
      )
    , (String
"gear_id", UpdateActivityOptions -> Maybe String
updateActivityOptions_gearId UpdateActivityOptions
options)
    , (String
"description", UpdateActivityOptions -> Maybe String
updateActivityOptions_description UpdateActivityOptions
options)
    ]

-- | 'Strive.Actions.getCurrentActivities'
data GetCurrentActivitiesOptions = GetCurrentActivitiesOptions
  { GetCurrentActivitiesOptions -> Maybe UTCTime
getCurrentActivitiesOptions_before :: Maybe UTCTime
  , GetCurrentActivitiesOptions -> Maybe UTCTime
getCurrentActivitiesOptions_after :: Maybe UTCTime
  , GetCurrentActivitiesOptions -> Integer
getCurrentActivitiesOptions_page :: Integer
  , GetCurrentActivitiesOptions -> Integer
getCurrentActivitiesOptions_perPage :: Integer
  }
  deriving Int -> GetCurrentActivitiesOptions -> ShowS
[GetCurrentActivitiesOptions] -> ShowS
GetCurrentActivitiesOptions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetCurrentActivitiesOptions] -> ShowS
$cshowList :: [GetCurrentActivitiesOptions] -> ShowS
show :: GetCurrentActivitiesOptions -> String
$cshow :: GetCurrentActivitiesOptions -> String
showsPrec :: Int -> GetCurrentActivitiesOptions -> ShowS
$cshowsPrec :: Int -> GetCurrentActivitiesOptions -> ShowS
Show

instance Default GetCurrentActivitiesOptions where
  def :: GetCurrentActivitiesOptions
def = GetCurrentActivitiesOptions
    { getCurrentActivitiesOptions_before :: Maybe UTCTime
getCurrentActivitiesOptions_before = forall a. Maybe a
Nothing
    , getCurrentActivitiesOptions_after :: Maybe UTCTime
getCurrentActivitiesOptions_after = forall a. Maybe a
Nothing
    , getCurrentActivitiesOptions_page :: Integer
getCurrentActivitiesOptions_page = Integer
1
    , getCurrentActivitiesOptions_perPage :: Integer
getCurrentActivitiesOptions_perPage = Integer
200
    }

instance QueryLike GetCurrentActivitiesOptions where
  toQuery :: GetCurrentActivitiesOptions -> Query
toQuery GetCurrentActivitiesOptions
options = forall a. QueryLike a => a -> Query
toQuery
    [ ( String
"before"
      , forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
        (forall a. Show a => a -> String
show forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> POSIXTime
utcTimeToPOSIXSeconds)
        (GetCurrentActivitiesOptions -> Maybe UTCTime
getCurrentActivitiesOptions_before GetCurrentActivitiesOptions
options)
      )
    , ( String
"after"
      , forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
        (forall a. Show a => a -> String
show forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> POSIXTime
utcTimeToPOSIXSeconds)
        (GetCurrentActivitiesOptions -> Maybe UTCTime
getCurrentActivitiesOptions_after GetCurrentActivitiesOptions
options)
      )
    , (String
"page", forall a. a -> Maybe a
Just (forall a. Show a => a -> String
show (GetCurrentActivitiesOptions -> Integer
getCurrentActivitiesOptions_page GetCurrentActivitiesOptions
options)))
    , (String
"per_page", forall a. a -> Maybe a
Just (forall a. Show a => a -> String
show (GetCurrentActivitiesOptions -> Integer
getCurrentActivitiesOptions_perPage GetCurrentActivitiesOptions
options)))
    ]

-- | 'Strive.Actions.getRelatedActivities'
type GetRelatedActivitiesOptions = PaginationOptions

-- | 'Strive.Actions.getFeed'
type GetFeedOptions = PaginationOptions