module LaunchDarkly.Server.Config.HttpConfiguration
    ( HttpConfiguration(..)
    , prepareRequest
    )
    where

import Network.HTTP.Client (Manager, ResponseTimeout, Request, requestHeaders, responseTimeout, setRequestIgnoreStatus, parseRequest)
import Network.HTTP.Types  (Header)
import Control.Monad.Catch (MonadThrow)

data HttpConfiguration = HttpConfiguration
    { defaultRequestHeaders :: ![Header]
    , defaultRequestTimeout :: !ResponseTimeout
    , tlsManager :: !Manager
    }

prepareRequest :: (MonadThrow m) => HttpConfiguration -> String -> m Request
prepareRequest config uri = do
    baseReq <- parseRequest uri
    pure $ setRequestIgnoreStatus $ baseReq
        { requestHeaders       = defaultRequestHeaders config <> requestHeaders baseReq
        , responseTimeout      = defaultRequestTimeout config
        }