{-# LANGUAGE OverloadedStrings #-}

module Hack2.Contrib.RequestExtra where

import Prelude ()
import Data.Maybe
import Air.Env
import Air.Extra
import Data.ByteString.Char8 (ByteString)
import Hack2 hiding (body)
import Hack2.Contrib.Request
import Hack2.Contrib.Utils
import qualified Data.ByteString.Char8 as B


media_type :: Env -> ByteString
media_type env = case env.content_type.B.unpack.split "\\s*[;,]\\s*" of
  [] -> ""
  x:_ -> x.lower.B.pack



media_type_params :: Env -> [(ByteString, ByteString)]
media_type_params env
  | env.content_type.B.unpack.empty = []
  | otherwise = 
      env
        .content_type
        .B.unpack
        .split "\\s*[;,]\\s"
        .drop 1
        .map (split "=")
        .select (length > is 2)
        .map (tuple2 > fromMaybe def)
        .map_fst (lower > B.pack)
        .map_snd (B.pack)


content_charset :: Env -> ByteString
content_charset env = env.media_type_params.lookup "charset" .fromMaybe ""