module Data.Salak.Environment where

import           Control.Monad.IO.Class
import           Control.Monad.State
import           Data.Char
import           Data.Salak.Types
import           Data.Text              (pack)
import           System.Environment

-- | Load `Properties` from 'Environment'
makePropertiesFromEnvironment :: Properties -> IO Properties
makePropertiesFromEnvironment p = getEnvironment >>= (\v -> return $ makePropertiesFromEnvironment' v p)


makePropertiesFromEnvironment' :: [(String,String)] -> Properties -> Properties
makePropertiesFromEnvironment' vs = makeProperties $ go <$> vs
  where
    go (k,v) = (pack $ fmap g2 k,PStr $ pack v)
    g2 '_' = '.'
    g2 a   = toLower a

-- | Load Properties from CommandLine
--
-- @since 0.2.2
loadEnvironment :: MonadIO m => LoadProperties m ()
loadEnvironment = get >>= liftIO . makePropertiesFromEnvironment >>= put