module ParkBench.Internal.Config
  ( Config (..),
    getFromEnv,
  )
where

import ParkBench.Internal.Prelude
import System.Environment
import Text.Read (readMaybe)

data Config = Config
  { Config -> Rational
runlen :: Rational
  }

getFromEnv :: IO Config
getFromEnv :: IO Config
getFromEnv = do
  Maybe Double
maybeRunlen <- String -> IO (Maybe Double)
lookupDoubleEnv String
"PARK_BENCH_RUNLEN"
  forall (f :: * -> *) a. Applicative f => a -> f a
pure
    Config
      { $sel:runlen:Config :: Rational
runlen =
          case Maybe Double
maybeRunlen of
            Maybe Double
Nothing -> Rational
100_000_000
            Just Double
runlen -> Double -> Rational
doubleToRational Double
runlen forall a. Num a => a -> a -> a
* Rational
1_000_000_000
      }

lookupDoubleEnv :: String -> IO (Maybe Double)
lookupDoubleEnv :: String -> IO (Maybe Double)
lookupDoubleEnv String
name = do
  Maybe String
val <- String -> IO (Maybe String)
lookupEnv String
name
  forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe String
val forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall a. Read a => String -> Maybe a
readMaybe)