{-# LANGUAGE FlexibleContexts #-} module Villefort.Stats (genStats, makeTable )where import Villefort.Database import Control.Monad.IO.Class import Control.Monad.Reader import Villefort.Definitions import Paths_Villefort import System.Random import Data.List -- | Helper function to generate row of table makeRow :: [String] -> String makeRow x = " " ++ (intercalate " " x )++ " " -- | Generate Table makeTable ::[String] -> [[String]] -> String makeTable tableData stats = " " ++ "" ++ ( makeRow tableData) ++ "" ++ (mconcat (map makeRow stats)) ++ "
" -- | Generate stats genStats :: (MonadReader VConfig m, MonadIO m) => m String genStats = do subjects <- getSubjects gits <- mapM makeGithub subjects avg <- getAvg statsSum <- getSum x <- liftIO $ getDataFileName "templates/header" header <- liftIO (readFile x) return (header ++ table ++ (makeTable ["Subject","time"] avg) ++ "

Sum

" ++ (makeTable ["Subject","time"] statsSum) ++ "" ++ (mconcat gits)) -- | Library to include for github table table :: String table = "

avg

" -- | creates the github like graph from database makeGithub ::(MonadReader VConfig m, MonadIO m) => String -> m Subject makeGithub subject = do z <- makeQuery ("select substr(Due,1,10) from todo where subject = '" ++ subject ++ "' and state = 0") color <- liftIO $ getColor let header = "

Calendar "++ subject ++ "

" return (header ++ (Prelude.concat q )++ bot) statsColors :: [String] statsColors = ["'#F44336'" ,"'#E91E63'" ,"'#9C27B0'" ,"'#673AB7'" ,"'#3F51B5'" ,"'#2196F3'" ,"'#03A9F4'" ,"'#00BCD4'" ,"'#009688'" ,"'#4CAF50'" ,"'#8BC34A'" ,"'#CDDC39'" ,"'#FFEB3B'" ,"'#FFC107'" ,"'#FF9800'" ,"'#FF5722'" ,"'#795548'" ,"'#9E9E9E'" ,"'#607D8B'" ] getColor :: IO String getColor = do number <- randomRIO (0, (length $ statsColors)-1) :: IO Int return (statsColors !! number)