module System.Taffybar.NetMonitor where

import Graphics.UI.Gtk
import System.Information.Network (getNetInfo)
import System.Information.StreamInfo (getTransfer)
import System.Taffybar.Widgets.PollingLabel
import Text.Printf (printf)

netMonitorNew :: Double -> String -> IO Widget
netMonitorNew interval interface = do
    label <- pollingLabelNew "" interval $ showNetInfo interface
    widgetShowAll label
    return $ toWidget label
    where
        showNetInfo :: String -> IO String
        showNetInfo interface = do
            trans <- getTransfer 0.3 $ getNetInfo interface
            let [incoming, outgoing] = map (/1e3) trans
            return $ printf "▼ %.2fkb/s ▲ %.2fkb/s" incoming outgoing