-- | 'Strive.Actions.Uploads'
module Strive.Options.Uploads
  ( UploadActivityOptions (..)
  ) where

import Data.Default (Default, def)
import Network.HTTP.Types (QueryLike, toQuery)
import Strive.Enums (ActivityType)

-- | 'Strive.Actions.uploadActivity'
data UploadActivityOptions = UploadActivityOptions
  { UploadActivityOptions -> Maybe ActivityType
uploadActivityOptions_activityType :: Maybe ActivityType
  , UploadActivityOptions -> Maybe String
uploadActivityOptions_name         :: Maybe String
  , UploadActivityOptions -> Maybe String
uploadActivityOptions_description  :: Maybe String
  , UploadActivityOptions -> Bool
uploadActivityOptions_private      :: Bool
  , UploadActivityOptions -> Bool
uploadActivityOptions_trainer      :: Bool
  , UploadActivityOptions -> Maybe String
uploadActivityOptions_externalId   :: Maybe String
  } deriving Int -> UploadActivityOptions -> ShowS
[UploadActivityOptions] -> ShowS
UploadActivityOptions -> String
(Int -> UploadActivityOptions -> ShowS)
-> (UploadActivityOptions -> String)
-> ([UploadActivityOptions] -> ShowS)
-> Show UploadActivityOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UploadActivityOptions] -> ShowS
$cshowList :: [UploadActivityOptions] -> ShowS
show :: UploadActivityOptions -> String
$cshow :: UploadActivityOptions -> String
showsPrec :: Int -> UploadActivityOptions -> ShowS
$cshowsPrec :: Int -> UploadActivityOptions -> ShowS
Show

instance Default UploadActivityOptions where
  def :: UploadActivityOptions
def = UploadActivityOptions :: Maybe ActivityType
-> Maybe String
-> Maybe String
-> Bool
-> Bool
-> Maybe String
-> UploadActivityOptions
UploadActivityOptions
    { uploadActivityOptions_activityType :: Maybe ActivityType
uploadActivityOptions_activityType = Maybe ActivityType
forall a. Maybe a
Nothing
    , uploadActivityOptions_name :: Maybe String
uploadActivityOptions_name = Maybe String
forall a. Maybe a
Nothing
    , uploadActivityOptions_description :: Maybe String
uploadActivityOptions_description = Maybe String
forall a. Maybe a
Nothing
    , uploadActivityOptions_private :: Bool
uploadActivityOptions_private = Bool
False
    , uploadActivityOptions_trainer :: Bool
uploadActivityOptions_trainer = Bool
False
    , uploadActivityOptions_externalId :: Maybe String
uploadActivityOptions_externalId = Maybe String
forall a. Maybe a
Nothing
    }

instance QueryLike UploadActivityOptions where
  toQuery :: UploadActivityOptions -> Query
toQuery UploadActivityOptions
options = [(String, Maybe String)] -> Query
forall a. QueryLike a => a -> Query
toQuery
    [ (String
"activity_type", (ActivityType -> String) -> Maybe ActivityType -> Maybe String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ActivityType -> String
forall a. Show a => a -> String
show (UploadActivityOptions -> Maybe ActivityType
uploadActivityOptions_activityType UploadActivityOptions
options))
    , (String
"name", UploadActivityOptions -> Maybe String
uploadActivityOptions_name UploadActivityOptions
options)
    , (String
"description", UploadActivityOptions -> Maybe String
uploadActivityOptions_description UploadActivityOptions
options)
    , (String
"private", String -> Maybe String
forall a. a -> Maybe a
Just (Int -> String
forall a. Show a => a -> String
show (Bool -> Int
forall a. Enum a => a -> Int
fromEnum (UploadActivityOptions -> Bool
uploadActivityOptions_private UploadActivityOptions
options))))
    , (String
"trainer", String -> Maybe String
forall a. a -> Maybe a
Just (Int -> String
forall a. Show a => a -> String
show (Bool -> Int
forall a. Enum a => a -> Int
fromEnum (UploadActivityOptions -> Bool
uploadActivityOptions_trainer UploadActivityOptions
options))))
    , (String
"external_id", UploadActivityOptions -> Maybe String
uploadActivityOptions_externalId UploadActivityOptions
options)
    ]