{-# LANGUAGE OverloadedLabels  #-}
{-# LANGUAGE OverloadedStrings #-}

module Drone.Endpoints.Repo where

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

getRepo ::
  (MonadHttp m, Client c) => c -> Text -> Text -> m (JsonResponse Repo)
getRepo c owner name = req GET url NoReqBody jsonResponse opt
  where
    url = mkUrl c $ format (paths ^. #pathRepo) owner name
    opt = mkHeader c

getRepos ::
  (MonadHttp m, Client c) => c -> m (JsonResponse [Repo])
getRepos c = req GET url NoReqBody jsonResponse opt
  where
    url = mkUrl c $ format (paths ^. #pathRepos)
    opt = mkHeader c

syncRepos ::
  (MonadHttp m, Client c) => c -> m (JsonResponse [Repo])
syncRepos c = req POST url NoReqBody jsonResponse opt
  where
    url = mkUrl c $ format (paths ^. #pathRepos)
    opt = mkHeader c

enableRepo ::
  (MonadHttp m, Client c) => c -> Text -> Text -> m (JsonResponse Repo)
enableRepo c owner name = req POST url NoReqBody jsonResponse opt
  where
    url = mkUrl c $ format (paths ^. #pathRepo) owner name
    opt = mkHeader c

disableRepo ::
  (MonadHttp m, Client c) => c -> Text -> Text -> m IgnoreResponse
disableRepo c owner name = req DELETE url NoReqBody ignoreResponse opt
  where
    url = mkUrl c $ format (paths ^. #pathRepo) owner name
    opt = mkHeader c

updateRepo :: (MonadHttp m, Client c) =>
  c -> Text -> Text -> RepoPatch -> m (JsonResponse Repo)
updateRepo c owner name patch =
  req PATCH url (ReqBodyJson patch) jsonResponse opt
  where
    url = mkUrl c $ format (paths ^. #pathRepo) owner name
    opt = mkHeader c

chownRepo ::
  (MonadHttp m, Client c) => c -> Text -> Text -> m (JsonResponse Repo)
chownRepo c owner name = req POST url NoReqBody jsonResponse opt
  where
    url = mkUrl c $ format (paths ^. #pathChown) owner name
    opt = mkHeader c

repairRepo ::
  (MonadHttp m, Client c) => c -> Text -> Text -> m IgnoreResponse
repairRepo c owner name = req POST url NoReqBody ignoreResponse opt
  where
    url = mkUrl c $ format (paths ^. #pathRepair) owner name
    opt = mkHeader c