-- | Standard and simple actions
module Shaker.Action.Standard
 where

import Control.Concurrent
import Control.Monad.Reader
import qualified Data.Map as M
import Shaker.Type
import System.Directory

-- | Print the list of available actions
runHelp ::  Plugin
runHelp = do
  commands <- asks shakerCommandMap
  lift $ do
  putStrLn "Following actions are available : "
  print $ M.keys commands
  putStrLn "use ~[actionName] for continuous launch"

-- | Print exit. The real exit management is made in conductor
runExit :: Plugin
runExit = do
  lift $ putStrLn "Exiting"
  quit_token <- asks (threadDataQuitToken . shakerThreadData)
  lift $ putMVar quit_token 42

-- | Print a begin action notification
runStartAction :: Plugin
runStartAction = lift $
  putStrLn "-- Begin action --"

runEmpty :: Plugin
runEmpty = return ()

-- | Print an end action notification
runEndAction :: Plugin
runEndAction = lift $
  putStrLn "-- End action --"

-- | Clean action is responsible to delete fileListenInfoDirectory containing temporary .o and .hi files
runClean :: Plugin
runClean = do
     toClean <- asks $ map compileInputBuildDirectory . shakerCompileInputs
     lift$  mapM_ action toClean
  where action toClean = do
                 ex <- doesDirectoryExist toClean
                 when ex $ removeDirectoryRecursive toClean

runInvalidAction :: Plugin
runInvalidAction = lift $ putStrLn "Invalid action,  use help to display available actions"