{-# LANGUAGE DataKinds           #-}
{-# LANGUAGE OverloadedLabels    #-}
{-# LANGUAGE OverloadedStrings   #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators       #-}

module Drone.Endpoints.Yaml where

import           Data.Extensible
import           Data.Text        (Text)
import           Drone.Client
import           Lens.Micro       ((^.))
import           Network.HTTP.Req

signYaml ::
  forall m c . (MonadHttp m, Client c) => c -> Text -> Text -> Text -> m Text
signYaml c owner name file = do
  resp <- req POST url (ReqBodyJson body) jsonResponse opt :: m (JsonResponse (Record '[ "data" >: Text ]))
  pure $ responseBody resp ^. #data
  where
    url  = mkUrl c $ format (paths ^. #pathSign) owner name
    body = #data @= file <: emptyRecord
    opt  = mkHeader c

verifyYaml ::
  (MonadHttp m, Client c) => c -> Text -> Text -> Text -> m IgnoreResponse
verifyYaml c owner name file = req POST url (ReqBodyJson body) ignoreResponse opt
  where
    url = mkUrl c $ format (paths ^. #pathVerify) owner name
    body = #data @= file <: emptyRecord
    opt = mkHeader c