{-# LANGUAGE OverloadedStrings, TemplateHaskell #-}
-- | User API.
module Web.Mackerel.Api.User (listUsers, deleteUser) where

import Data.Aeson.TH (deriveJSON)
import qualified Data.ByteString.Char8 as BS
import Data.Semigroup ((<>))
import Network.HTTP.Types (StdMethod(..))

import Web.Mackerel.Client
import Web.Mackerel.Internal.Api
import Web.Mackerel.Internal.TH
import Web.Mackerel.Types.User

data ListUsersResponse = ListUsersResponse { responseUsers :: [User] }
$(deriveJSON options ''ListUsersResponse)

listUsers :: Client -> IO (Either ApiError [User])
listUsers client
  = request client GET "/api/v0/users" [] emptyBody (createHandler responseUsers)

deleteUser :: Client -> UserId -> IO (Either ApiError User)
deleteUser client (UserId userId')
  = request client DELETE ("/api/v0/users/" <> BS.pack userId') [] emptyBody (createHandler id)