-- | Convenience functions for reporting (displaying and/or logging)
--   status messages.
--
module Network.Services.TSN.Report (
  report_debug,
  report_error,
  report_info,
  report_warning )
where

import Network.Services.TSN.Logging (
  log_debug,
  log_error,
  log_info,
  log_warning )
import Network.Services.TSN.Terminal (
  display_debug,
  display_error,
  display_info,
  display_warning )


-- | Display and log debug information. WARNING! This does not
--   automatically append a newline. The output is displayed/logged
--   as-is, for, you know, debug purposes.
report_debug :: String -> IO ()
report_debug s = do
  display_debug s
  log_debug s


-- | Display and log an error condition. This will prefix the error
--   with \"ERROR: \" when displaying (but not logging) it so that it
--   stands out.
--
report_error :: String -> IO ()
report_error s = do
  display_error $ "ERROR: " ++ s
  log_error s


-- | Display and log an informational (status) message.
--
report_info :: String -> IO ()
report_info s = do
  display_info s
  log_info s


-- | Display and log a warning. This will prefix the warning with
--   \"WARNING: \" when displaying (but not logging) it so that it
--   stands out.
--
report_warning :: String -> IO ()
report_warning s = do
  display_warning $ "WARNING: " ++ s
  log_warning s