{-# LANGUAGE DataKinds #-}

module Hercules.API.Agent.Tasks where

import Data.Aeson (Object)
import Hercules.API.Prelude
import qualified Hercules.API.Task as Task
import Hercules.API.TaskStatus
import Servant.API

data TasksAPI auth f = TasksAPI
  { forall auth f.
TasksAPI auth f
-> f :- ("tasks" :> (auth :> Post '[JSON] (Maybe (Task Any))))
tasksReady ::
      f
        :- "tasks"
          :> auth
          :> Post '[JSON] (Maybe (Task.Task Task.Any)),
    forall auth f.
TasksAPI auth f
-> f
   :- ("tasks"
       :> (Capture "taskId" (Id (Task Any))
           :> (ReqBody '[JSON] TaskStatus
               :> (auth :> Post '[JSON] NoContent))))
tasksSetStatus ::
      f
        :- "tasks"
          :> Capture "taskId" (Id (Task.Task Task.Any))
          :> ReqBody '[JSON] TaskStatus
          :> auth
          :> Post '[JSON] NoContent,
    forall auth f.
TasksAPI auth f
-> f
   :- ("tasks"
       :> ("log"
           :> (ReqBody '[JSON] [Object] :> (auth :> Post '[JSON] NoContent))))
postLog ::
      f
        :- "tasks"
          :> "log"
          :> ReqBody '[JSON] [Object]
          :> auth
          :> Post '[JSON] NoContent
  }
  deriving (forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall auth f x. Rep (TasksAPI auth f) x -> TasksAPI auth f
forall auth f x. TasksAPI auth f -> Rep (TasksAPI auth f) x
$cto :: forall auth f x. Rep (TasksAPI auth f) x -> TasksAPI auth f
$cfrom :: forall auth f x. TasksAPI auth f -> Rep (TasksAPI auth f) x
Generic)