{-# LANGUAGE
    OverloadedStrings
  #-}


module Network.Wai.Middleware.ContentType.Clay where

import           Network.Wai.Middleware.ContentType.Types as CT
import           Network.Wai.Middleware.ContentType.Text  (textOnly)
import           Network.HTTP.Types                       (status200, Status, ResponseHeaders)
import           Network.Wai                              (Response)

import           Clay.Render (Config, renderWith)
import           Clay.Stylesheet (Css, App)
import qualified Data.HashMap.Lazy                        as HM


-- * Lifted Combinators

clay :: Monad m =>
        Config -> [App] -> Css
     -> FileExtListenerT m ()
clay c as i =
  tell' $ HM.singleton CT.Css $
    ResponseVia
      (c,as,i)
      status200
      [("Content-Type","text/css")]
      (\(c',as',i') -> clayOnly c' as' i')

{-# INLINEABLE clay #-}


-- * Data Only

clayOnly :: Config -> [App] -> Css -> Status -> ResponseHeaders -> Response
clayOnly c as css =
  textOnly (renderWith c as css)