module OpenTelemetry.Debug where

import Control.Concurrent.STM
import Control.Monad.IO.Class
import System.Environment
import System.IO
import System.IO.Unsafe

dd_ :: Show a => String -> a -> IO ()
dd_ =
  unsafePerformIO $
    lookupEnv "OPENTELEMETRY_DEBUG" >>= \case
      Nothing -> pure $ \_ _ -> pure ()
      Just "0" -> pure $ \_ _ -> pure ()
      Just "false" -> pure $ \_ _ -> pure ()
      _ -> pure $ \s thing -> liftIO $ do
        hPutStr stderr (s <> ": ")
        hPutStrLn stderr (show thing)
{-# NOINLINE dd_ #-}

d_ :: String -> IO ()
d_ =
  unsafePerformIO $
    lookupEnv "OPENTELEMETRY_DEBUG" >>= \case
      Nothing -> pure $ \_ -> pure ()
      Just "0" -> pure $ \_ -> pure ()
      Just "false" -> pure $ \_ -> pure ()
      _ -> pure $ \s -> liftIO $ do
        hPutStrLn stderr s
{-# NOINLINE d_ #-}

inc :: Int -> TVar Int -> IO ()
inc amount counterVar = atomically $ modifyTVar counterVar (+ amount)