{-# LANGUAGE OverloadedStrings #-}

module ACMS.API.REST where

import ACMS.API.Fetch
import Data.Aeson qualified as A
import Data.Function ((&))
import Data.String (IsString (fromString))
import Miso.String (MisoString)

restRequest :: String -> Request
restRequest endpoint =
  fromString ("http://localhost:8081/api/rest" <> endpoint)

schemaVersion :: (APIMonad m, A.FromJSON a) => m a
schemaVersion =
  restRequest "/schemaVersion"
    & fetch
    >>= A.throwDecode

listCollections :: (APIMonad m) => m [MisoString]
listCollections =
  restRequest "/collection"
    & fetch
    >>= A.throwDecode

createCollection :: (APIMonad m) => MisoString -> m ()
createCollection collection =
  restRequest "/collections"
    & setRequestMethod "POST"
    & setRequestBodyLBS (A.encode (A.toJSON collection))
    & fetch
    >>= A.throwDecode