{-# LANGUAGE QuasiQuotes #-}

-- | File templates for @cabal@ and @stack@ scripts.

module Summoner.Template.Script
       ( scriptFile
       ) where

import NeatInterpolation (text)

import Summoner.GhcVer (GhcVer, baseVer, latestLts)
import Summoner.Settings (Tool (..))


-- | 'Text' content for a single script file.
scriptFile :: GhcVer -> Tool -> Text
scriptFile ghcVer = \case
    Cabal ->
        [text|
        #!/usr/bin/env cabal
        {- cabal:
        build-depends:
          , base ^>= $baseVersion
        -}

        main :: IO ()
        main = putStrLn "Hello, World!"
        |]
    Stack ->
        [text|
        #!/usr/bin/env stack
        {- stack
          --resolver lts-${ltsVersion}
          script
          --package base
        -}

        main :: IO ()
        main = putStrLn "Hello, World!"
        |]
  where
    baseVersion, ltsVersion :: Text
    baseVersion = baseVer ghcVer
    ltsVersion  = latestLts ghcVer