module FPPrac.Trees 
    ( RoseTree(..)
    , RBTree(..)
    , NodeColor(..)
    , rbExampleTree
    , roseExampleTree
    , showRBTree
    , showRBTreeList
    , showRoseTree
    , showRoseTreeList
    ) where
    
    
import Prelude

import Eventloop.EventloopCore
import Eventloop.Types.EventTypes
import Eventloop.DefaultConfiguration
import qualified Eventloop.Module.Websocket.Canvas as C
import Eventloop.Module.BasicShapes
import Eventloop.Module.DrawTrees

data ProgramState = ProgramState
                  deriving (Eq, Show)

beginProgramState = ProgramState

eventloopConfig trees = defaultConfig { moduleConfigurations=[ defaultDrawTreesModuleConfiguration
                                                             , defaultBasicShapesModuleConfiguration
                                                             , C.defaultCanvasModuleConfiguration
                                                             ]}
                where
                    defaultConfig = allModulesEventloopConfiguration beginProgramState (eventloop trees)



eventloop :: [Tree] -> ProgramState -> In -> (ProgramState, [Out])
eventloop trees state Start = (state, [ OutCanvas $ C.SetupCanvas 1 1 (1024, 1024) (C.CSSPercentage 0, C.CSSPercentage 0)
                                      , OutDrawTrees $ DrawTrees 1 trees
                                      , Stop
                                      ]
                              )

showRBTree :: RBTree -> IO()
showRBTree tree = showRBTreeList [tree] 
 
showRBTreeList :: [RBTree] -> IO ()
showRBTreeList trees = startMainloop (eventloopConfig (map TRBTree trees))


showRoseTree :: RoseTree -> IO()
showRoseTree tree = showRoseTreeList [tree] 
 
showRoseTreeList :: [RoseTree] -> IO ()
showRoseTreeList trees = startMainloop (eventloopConfig (map TRoseTree trees))