-- | Contains the default configuration of shaker
module Shaker.Config
 where

import Shaker.Type
import Shaker.PluginConfig
import Shaker.Cli(InputState(..))
import Control.Concurrent

defaultInput ::ShakerInput  
defaultInput = ShakerInput {
  compileInputs = [defaultCompileInput],
  listenerInput = defaultListenerInput,
  pluginMap = defaultPluginMap,
  commandMap = defaultCommandMap
  ,argument = Nothing
  ,modifiedInfoFiles = []
  }

defaultInputInitialized :: IO ShakerInput 
defaultInputInitialized = do 
  defThrdData <- defaultThreadData
  input_state <- defaultInputState 
  return defaultInput { 
    threadData = defThrdData 
    ,inputState = input_state 
 }

defaultThreadData :: IO ThreadData 
defaultThreadData = do 
  thread_listen <- newMVar [] :: IO  ThreadIdList 
  thread_quit <- newMVar [] :: IO ThreadIdList 
  listen_token <- newEmptyMVar 
  quit_token <- newEmptyMVar  
  return ThreadData {
      listenToken = listen_token
      ,quitToken = quit_token
      ,threadIdListenList = thread_listen
      ,threadIdQuitList = thread_quit
    } 

defaultInputState :: IO InputState
defaultInputState = do
  inputMv <- newEmptyMVar 
  tokenMv <- newEmptyMVar  
  return InputState { input = inputMv, token =  tokenMv }