module Eventloop.DefaultConfiguration where



import Control.Concurrent.SafePrint



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

import Eventloop.Types.Events

import Eventloop.Types.System



allModulesEventloopSetupConfiguration :: progstateT -> {- Begin program state -}

                                         (progstateT -> In -> (progstateT, [Out])) -> {- Eventloop function -}

                                         EventloopSetupConfiguration progstateT

allModulesEventloopSetupConfiguration beginProgstate eventloop

    = ( EventloopSetupConfiguration

            -- Begin program state

            beginProgstate

            

            -- Eventloop function

            eventloop

            

            -- All module setupconfigurations

            [ setupFileModuleConfiguration

            , setupTimerModuleConfiguration

            , setupKeyboardModuleConfiguration

            , setupMouseModuleConfiguration

            , setupStdInModuleConfiguration

            , setupStdOutModuleConfiguration

            ]

        )





setupSharedIOConstants :: IO SharedIOConstants

setupSharedIOConstants

    = do

        safePrintToken <- createSafePrintToken

        return (SharedIOConstants safePrintToken undefined)



setupSharedIOState :: IO SharedIOState

setupSharedIOState

    = return SharedIOState