module IHP.PGVersion (defaultUuidFunction) where

import IHP.Prelude
import qualified System.Environment as Env
import Text.Read (readMaybe)

-- | Returns the default UUID function based on the @IHP_POSTGRES_VERSION@ env var.
-- When set to 18 or higher, returns @"uuidv7"@ (PostgreSQL 18+ native function).
-- Otherwise returns @"uuid_generate_v4"@ (requires uuid-ossp extension).
defaultUuidFunction :: IO Text
defaultUuidFunction :: IO Text
defaultUuidFunction = do
    pgVersion <- String -> Maybe String -> String
forall a. a -> Maybe a -> a
fromMaybe String
"17" (Maybe String -> String) -> IO (Maybe String) -> IO String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> IO (Maybe String)
Env.lookupEnv String
"IHP_POSTGRES_VERSION"
    let version = Int -> Maybe Int -> Int
forall a. a -> Maybe a -> a
fromMaybe Int
17 (String -> Maybe Int
forall a. Read a => String -> Maybe a
readMaybe String
pgVersion :: Maybe Int)
    pure if version >= 18 then "uuidv7" else "uuid_generate_v4"