module System.Himpy.Logger (log_start, log_info) where
import System.IO (openFile, hPutStrLn, hFlush, hClose,
                  IOMode (AppendMode), Handle)
import Control.Concurrent (forkIO)
import Control.Monad (void, forever)
import Control.Monad.STM (atomically)
import Control.Concurrent.STM.TChan (writeTChan, readTChan, newTChanIO, TChan)

-- Simplistic logging module

log_line :: TChan String -> String -> IO ()
log_line chan path = do
  line <- atomically $ readTChan chan
  fd <- openFile path AppendMode
  hPutStrLn fd line
  hFlush fd
  hClose fd

log_start :: String -> IO (TChan String)
log_start path = do
  chan <- newTChanIO
  void $ forkIO $ forever $ log_line chan path
  return (chan)

log_info :: TChan String -> String -> IO ()
log_info chan msg = do
  let info_msg = "[info] " ++ msg
  atomically $ writeTChan chan info_msg