module OpenTelemetry.LightStep where

import Control.Monad.Catch
import Control.Monad.IO.Class
import OpenTelemetry.Common
import OpenTelemetry.Implicit
import OpenTelemetry.LightStep.Config
import OpenTelemetry.LightStep.ZipkinExporter
import System.IO

withEnvConfigLightStepOpenTelemetry :: (MonadIO m, MonadMask m) => m a -> m a
withEnvConfigLightStepOpenTelemetry action = do
  mcfg <- getEnvConfig
  case mcfg of
    Just cfg -> do
      exporter <- createLightStepSpanExporter cfg
      let otelConfig = OpenTelemetryConfig {otcSpanExporter = exporter}
      withOpenTelemetry otelConfig action
    Nothing -> do
      liftIO $ hPutStrLn stderr "Warning: LightStep exporter is not configured"
      action