module Linnet.Input
  ( Input(..)
  , inputGet
  , inputFromRequest
  ) where

import qualified Data.Text          as T
import qualified Data.Text.Encoding as TE
import           Network.HTTP.Types (QueryItem)
import           Network.Wai        (Request, defaultRequest, pathInfo,
                                     queryString, rawPathInfo)

-- | Container for the reminder of the request path and request itself
data Input =
  Input
    { reminder :: [T.Text]
    , request  :: Request
    }
  deriving (Show)

inputFromRequest :: Request -> Input
inputFromRequest req = Input {reminder = pathInfo req, request = req}

inputGet :: T.Text -> [QueryItem] -> Input
inputGet path items =
  Input {request = defaultRequest {pathInfo = r, rawPathInfo = TE.encodeUtf8 path, queryString = items}, reminder = r}
  where
    r = T.split (== '/') path