{-# LANGUAGE OverloadedStrings #-}


module Web.Routes.Nested.FileExtListener.Lucid where

import           Web.Routes.Nested.FileExtListener.Types

import           Data.Map
import qualified Lucid.Base                              as L
import           Network.HTTP.Types                      (RequestHeaders,
                                                          Status, status200)
import           Network.Wai

import           Control.Monad.Writer



lucid :: Monad m =>
         L.HtmlT m () -> FileExtListenerT Response m ()
lucid i = do
  i' <- lift $ L.renderBST i
  let r = responseLBS status200 [("Content-Type", "text/html")] i'
  FileExtListenerT $ tell $
    FileExts $ singleton Html r

lucidStatus :: Monad m =>
         Status -> L.HtmlT m () -> FileExtListenerT Response m ()
lucidStatus s i = do
  i' <- lift $ L.renderBST i
  let r = responseLBS s [("Content-Type", "text/html")] i'
  FileExtListenerT $ tell $
    FileExts $ singleton Html r

lucidHeaders :: Monad m =>
         RequestHeaders -> L.HtmlT m () -> FileExtListenerT Response m ()
lucidHeaders hs i = do
  i' <- lift $ L.renderBST i
  let r = responseLBS status200 hs i'
  FileExtListenerT $ tell $
    FileExts $ singleton Html r

lucidStatusHeaders :: Monad m =>
         Status -> RequestHeaders -> L.HtmlT m () -> FileExtListenerT Response m ()
lucidStatusHeaders s hs i = do
  i' <- lift $ L.renderBST i
  let r = responseLBS s hs i'
  FileExtListenerT $ tell $
    FileExts $ singleton Html r




lucidOnly :: Monad m =>
             L.HtmlT m () -> m Response
lucidOnly i = do
  i' <- L.renderBST i
  return $ responseLBS status200 [("Content-Type", "text/html")] i'

lucidOnlyStatus :: Monad m =>
             Status -> L.HtmlT m () -> m Response
lucidOnlyStatus s i = do
  i' <- L.renderBST i
  return $ responseLBS s [("Content-Type", "text/html")] i'

lucidOnlyHeaders :: Monad m =>
             RequestHeaders -> L.HtmlT m () -> m Response
lucidOnlyHeaders hs i = do
  i' <- L.renderBST i
  return $ responseLBS status200 hs i'

lucidOnlyStatusHeaders :: Monad m =>
             Status -> RequestHeaders -> L.HtmlT m () -> m Response
lucidOnlyStatusHeaders s hs i = do
  i' <- L.renderBST i
  return $ responseLBS s hs i'