module CLI.Ls where

import           Control.Applicative
import           Control.Monad
import           Data.List
import           Data.List.Split
import           Data.Time.LocalTime
import           System.Directory
import           System.IO


ls filepath = do 
  files <-  map ((filepath ++ "/") ++ ) <$> filter (isInfixOf "log") <$> getDirectoryContents filepath
  contents <- mapM readFile files
  return $ timeFilter $ map ( \xs -> (localTimeOfDay $ read (xs!!0 ++" "++ xs!!1), xs!!5 ,xs!!7 ,xs!!9 ))$ filter(\xs -> (length xs)  == 12 ) $ join $ map (splitEvery 12) $ filter(\xs -> (length xs) > 5 )  $ map words $ map concat $ map (filter (isInfixOf "Resources: [G]:") . lines) contents
  
ls2 filepath = do
  files <-  map ((filepath ++ "/") ++ ) <$> filter (isInfixOf "log") <$> getDirectoryContents filepath
  contents <- mapM readFile files
  return $ map ( \xs -> ( todHour.localTimeOfDay $ (read (xs!!0 ++" "++ xs!!1)) ,read (xs!!5) ::Int ,read (xs!!7) ::Int ,read (xs!!9) ::Int) ) $ filter(\xs -> (length xs)  == 12 ) $ join $ map (splitEvery 12) $ filter(\xs -> (length xs) > 5 )  $ map words $ map concat $ map (filter (isInfixOf "Resources: [G]:") . lines) contents

timeFilter  = foldr (\x acc -> (if acc ==[] || ((\(y,_,_,_) -> y) x) < ((\(z,_,_,_) -> z) $ head acc) then x:acc else acc) ) []