{-# LANGUAGE
    OverloadedStrings
  #-}


module Network.Wai.Middleware.ContentType.Pandoc where

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

import qualified Data.Text.Lazy                           as LT
import qualified Text.Pandoc                              as P
import qualified Data.HashMap.Lazy                        as HM


-- * Lifted Combinators

markdown :: Monad m =>
            P.Pandoc
         -> FileExtListenerT m ()
markdown i =
  tell' $ HM.singleton Markdown $
    ResponseVia
      i
      status200
      [("Content-Type","text/markdown")]
      markdownOnly

{-# INLINEABLE markdown #-}


-- * Data Only

markdownOnly :: P.Pandoc -> Status -> ResponseHeaders -> Response
markdownOnly p =
  textOnly (LT.pack $ P.writeMarkdown P.def p)