{-# LANGUAGE OverloadedStrings #-}

module HaskellWorks.Data.Uri.AWS.Env
  ( awsLogger
  ) where

import Antiope.Env                (LogLevel (..))
import Control.Concurrent         (myThreadId)
import Control.Monad
import Data.Semigroup             ((<>))
import HaskellWorks.Data.Uri.Show

import qualified Data.ByteString.Lazy             as LBS
import qualified Data.ByteString.Lazy.Char8       as LC8
import qualified Data.Text.Encoding               as T
import qualified HaskellWorks.Data.Uri.IO.Console as CIO
import qualified System.IO                        as IO

awsLogger :: Maybe LogLevel -> LogLevel -> LC8.ByteString -> IO ()
awsLogger maybeConfigLogLevel msgLogLevel message =
  forM_ maybeConfigLogLevel $ \configLogLevel ->
    when (msgLogLevel <= configLogLevel) $ do
      threadId <- myThreadId
      CIO.hPutStrLn IO.stderr $ "[" <> tshow msgLogLevel <> "] [tid: " <> tshow threadId <> "]"  <> text
  where text = T.decodeUtf8 $ LBS.toStrict message