{-# LANGUAGE TemplateHaskell #-}

module Wrench.Misc (wrenchVersion) where

import Data.Version (showVersion)
import Language.Haskell.TH.Env (envQ)
import Paths_wrench (version)
import Relude

-- | @<version>[-<suffix>] [(<commit>) <commit date>]@
wrenchVersion :: Text
wrenchVersion :: Text
wrenchVersion = Text
ver Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
provenance
    where
        suffix, hash, date :: String
        suffix :: String
suffix = String -> Maybe String -> String
forall a. a -> Maybe a -> a
fromMaybe String
"" $$(envQ "VERSION_SUFFIX")
        hash :: String
hash = String -> Maybe String -> String
forall a. a -> Maybe a -> a
fromMaybe String
"" $$(envQ "GIT_HASH")
        date :: String
date = String -> Maybe String -> String
forall a. a -> Maybe a -> a
fromMaybe String
"" $$(envQ "GIT_DATE")
        ver :: Text
ver = String -> Text
forall a. ToText a => a -> Text
toText (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ Version -> String
showVersion Version
version String -> String -> String
forall a. Semigroup a => a -> a -> a
<> if String
suffix String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"" then String
"" else String
"-" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
suffix
        provenance :: Text
provenance = String -> Text
forall a. ToText a => a -> Text
toText (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ case (String
hash, String
date) of
            (String
"", String
_) -> String
""
            (String
h, String
"") -> String
" (" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
7 String
h String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
")"
            (String
h, String
d) -> String
" (" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
7 String
h String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
") " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
d