module Eventloop.DefaultConfiguration where

import Eventloop.EventloopCore
import Eventloop.Types.EventTypes
import Eventloop.RouteEvent

import Eventloop.Module.Websocket.Keyboard
import Eventloop.Module.Websocket.Mouse
import Eventloop.Module.File
import Eventloop.Module.StdOut
import Eventloop.Module.StdIn
import Eventloop.Module.Timer


allModulesEventloopConfiguration :: progstateT -> {- Begin program state -}
                                   (progstateT -> In -> (progstateT, [Out])) -> {- Eventloop function -}
                                    EventloopConfiguration progstateT
allModulesEventloopConfiguration beginProgstate eventloop = (EventloopConfiguration
                                                                       -- Begin program state
                                                                       beginProgstate
                                                                       -- Eventloop function
                                                                       eventloop
                                                                       -- OutEvent Router
                                                                       routeOutEvent
                                                                       -- SharedIOState
                                                                       defaultSharedIOState
                                                                       -- All module configurations
                                                                       [ defaultFileModuleConfiguration
                                                                       , defaultTimerModuleConfiguration
                                                                       , defaultKeyboardModuleConfiguration
                                                                       , defaultMouseModuleConfiguration
                                                                       , defaultStdInModuleConfiguration
                                                                       , defaultStdOutModuleConfiguration
                                                                       ]
                                                            )
                                                            
defaultSharedIOState :: SharedIOState
defaultSharedIOState = SharedIOState undefined