{-# LANGUAGE OverloadedStrings #-}



module Web.Routes.Nested.FileExtListener.Text where

import           Web.Routes.Nested.FileExtListener.Types
import           Web.Routes.Nested.FileExtListener.ByteString

import           Data.Map
import qualified Data.Text.Lazy                          as LT
import qualified Data.Text.Lazy.Encoding                 as LT
import           Network.HTTP.Types                      (RequestHeaders,
                                                          Status, status200)
import           Network.Wai

import           Data.Composition
import           Control.Monad.Writer


-- | Uses @Text@ as the key in the map, and @"text/plain"@ as the content type.
text :: Monad m => LT.Text -> FileExtListenerT Response m ()
text = textStatusHeaders status200 [("Content-Type", "text/plain")]

textStatus :: Monad m => Status -> LT.Text -> FileExtListenerT Response m ()
textStatus s = textStatusHeaders s [("Content-Type", "text/plain")]

textHeaders :: Monad m => RequestHeaders -> LT.Text -> FileExtListenerT Response m ()
textHeaders = textStatusHeaders status200

textStatusHeaders :: Monad m => Status -> RequestHeaders -> LT.Text -> FileExtListenerT Response m ()
textStatusHeaders s hs i =
  let r = textOnlyStatusHeaders s hs i in
  FileExtListenerT $ tell $
    FileExts $ singleton Text r




textOnly :: LT.Text -> Response
textOnly = textOnlyStatusHeaders status200 [("Content-Type", "text/plain")]

textOnlyStatus :: Status -> LT.Text -> Response
textOnlyStatus s = textOnlyStatusHeaders s [("Content-Type", "text/plain")]

textOnlyHeaders :: RequestHeaders -> LT.Text -> Response
textOnlyHeaders = textOnlyStatusHeaders status200

textOnlyStatusHeaders :: Status -> RequestHeaders -> LT.Text -> Response
textOnlyStatusHeaders s hs i = bytestringOnlyStatus s hs $ LT.encodeUtf8 i