{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}

module Eventloop.Module.Graphs.Types

    ( module Eventloop.Module.Graphs.Types

    , M.MouseEvent(..)

    , M.MouseButton(..)

    ) where



import GHC.Generics (Generic)

import Control.DeepSeq



import qualified Eventloop.Module.Websocket.Mouse.Types as M

    

type Pos = (Float, Float)

type Vector = (Float, Float)





data GraphsIn = Mouse M.MouseEvent Pos

              | Key [Char]

              deriving (Eq, Show)

    

data GraphsOut = SetupGraphs

               | DrawGraph Graph

               | Instructions [String]

               deriving (Eq, Show, Generic, NFData)

              

----- Graph -----

type Label   = Char

type Weight  = Float



type Node = (Label, Pos, Color)

type Edge = (Label, Label, Color, Weight, Thickness)



data Graph = Graph

            { nodes    :: [Node]

            , edges    :: [Edge]

            , directed :: Directed

            , weighted :: Weighted

            } deriving (Eq, Show, Generic, NFData)

            

----- Graph Graphical -----            

data Color = Red

           | Blue

           | Green

           | Purple

           | Grey

           | Yellow

           | Orange

           | Black

           | White

           deriving (Eq, Show, Generic, NFData)



data Thickness = Thin

               | Thick

               deriving (Eq, Show, Generic, NFData)



data Directed  = Directed

               | Undirected

                deriving (Eq, Show, Generic, NFData)

               

data Weighted  = Weighted

               | Unweighted

               deriving (Eq, Show, Generic, NFData)