module Bird.Logger where

import Bird.BirdResponder
import Bird.Reply
import Bird.Request
import Text.Printf
import qualified Data.String.Utils as StringUtils (join)
import System.CPUTime

defaultLogger request router = do
  let logPrelude = "\n" ++ (show $ verb request) ++ " " ++ (show $ rawRequestUri request)
  start <- getCPUTime
  (reply, logMessages) <- runBirdResponder request router 
  end <- getCPUTime
  let logEpilogue = (printf "  Response code: %s" (show $ replyStatus reply)) ++ (printf "\n  Response time: %0.3fs" (((fromIntegral (end - start)) / (10^12)) :: Double))
  putStrLn $ (StringUtils.join "\n" ([logPrelude] ++ logMessages ++ [logEpilogue])) ++ "\n"
  return reply