module HTTP (
    sendGET,
    sendGETwH,
    sendHEAD,
    sendHEADwH,
    responseBody,
    responseStatus,
    responseHeaders,
    getHeaderValue,
    HeaderName,
) where

import Data.ByteString
import qualified Data.ByteString.Lazy as BL
import Network.HTTP.Client
import Network.HTTP.Types

sendGET :: String -> IO (Response BL.ByteString)
sendGET url = sendGETwH url []

sendGETwH :: String -> [Header] -> IO (Response BL.ByteString)
sendGETwH url hdr = do
    manager <- newManager defaultManagerSettings
    request <- parseRequest url
    let request' = request{requestHeaders = hdr}
    response <- httpLbs request' manager
    return response

sendHEAD :: String -> IO (Response BL.ByteString)
sendHEAD url = sendHEADwH url []

sendHEADwH :: String -> [Header] -> IO (Response BL.ByteString)
sendHEADwH url hdr = do
    manager <- newManager defaultManagerSettings
    request <- parseRequest url
    let request' = request{requestHeaders = hdr, method = methodHead}
    response <- httpLbs request' manager
    return response

getHeaderValue :: HeaderName -> [Header] -> Maybe ByteString
getHeaderValue = lookup
