module Main (main) where

import Text.Dot

-- data Animation = Start

src, box, diamond :: String -> Dot NodeId
src     label = node $ [ ("shape","none"),("label",label) ]
box     label = node $ [ ("shape","box"),("style","rounded"),("label",label) ]
diamond label = node $ [("shape","diamond"),("label",label),("fontsize","10")]

main :: IO ()
main = putStrLn $ showDot $ do
        attribute ("size","40,15")
        attribute ("rankdir","LR")
        refSpec <- src "S"
        tarSpec <- src "T"
        same [refSpec,tarSpec]

        c1 <- box "S"
        c2 <- box "C"
        c3 <- box "F"
        same [c1,c2,c3]

        refSpec .->. c1
        tarSpec .->. c2
        tarSpec .->. c3

        m1 <- box "x"
        m2 <- box "y"
        ntm <- box "z"

        same [m1,m2,ntm] 
        c1 .->. m1
        c2 .->. m2

        xilinxSynthesis <- box "x"
        c3 .->. xilinxSynthesis

        gns <- box "G"
        xilinxSynthesis .->. gns

        gns .->. ntm

        ecs <- sequence
                [ diamond "E"
                , diamond "E"
                , diamond "Eq"
                ]
        same ecs

        m1 .->. (ecs !! 0)
        m1 .->. (ecs !! 1)
        m2 .->. (ecs !! 0)
        m2 .->. (ecs !! 2)
        ntm .->. (ecs !! 1)
        ntm .->. (ecs !! 2)

        _ <- sequence [ do evidence <- src "EE"
                           n .->. evidence
                      | n <- ecs 
                      ]


        edge refSpec tarSpec [("label","Engineering\nEffort"),("style","dotted")]

        () <- scope $ do v1 <- box "Hello"
                         v2 <- box "World"
                         v1 .->. v2

        (x,()) <- cluster $
                do v1 <- box "Hello"
                   v2 <- box "World"
                   v1 .->. v2
        
--      x .->. m2
        -- for hpc
        () <- same [x,x]
        v <- box "XYZ"
        v .->. v
        () <- attribute ("rankdir","LR")

        let n1 = userNodeId 1
        let n2 = userNodeId (-1)

        () <- n1 `userNode` [ ("shape","box")]
        n1 .->. n2
        
        _ <- box "XYZ"

        _ <- box "(\n\\n)\"(/\\)"

        netlistGraph (\ a -> [("label","X" ++ show a)])
                     (\ a -> [succ a `mod` 10,pred a `mod` 10])
                     [ (n,n) | n <- [0..9] :: [Int] ]
                     
        _ <- box "touché"
        _ <- box "eight characters: кирилица"
        
        return ()
