    module Propellor.Debug where

    import Control.Monad.IfElse
    import System.IO
    import System.Log.Logger
    import System.Log.Formatter
    import System.Log.Handler (setFormatter)
    import System.Log.Handler.Simple
    import Control.Applicative
    import Prelude

    import Utility.Monad
    import Utility.Env
    import Utility.Exception
    import Utility.Process
    import Utility.Directory

    debug :: [String] -> IO ()
    debug = debugM "propellor" . unwords

    checkDebugMode :: IO ()
    checkDebugMode = go =<< getEnv "PROPELLOR_DEBUG"
      where
    	go (Just "1") = enableDebugMode
    	go (Just _) = noop
    	go Nothing = whenM (doesDirectoryExist ".git") $
    		whenM (elem "1" . lines <$> getgitconfig) enableDebugMode
    	getgitconfig = catchDefaultIO "" $
    		readProcess "git" ["config", "propellor.debug"]

    enableDebugMode :: IO ()
    enableDebugMode = do
    	f <- setFormatter
    		<$> streamHandler stderr DEBUG
    		<*> pure (simpleLogFormatter "[$time] $msg")
    	updateGlobalLogger rootLoggerName $
    		setLevel DEBUG .  setHandlers [f]