{-# LANGUAGE OverloadedStrings #-}
module Jenga.Render
  ( LazyText (..)
  , renderAsCabalConfig
  , renderAsMafiaLock
  ) where

import qualified Data.List as DL
import           Data.Text (Text)
import qualified Data.Text.Lazy as LT

import           Jenga.PackageList


newtype LazyText
  = LazyText { unLazyText :: LT.Text }


renderAsCabalConfig :: [(Text, PackageInfo)] -> LazyText
renderAsCabalConfig pkgs =
  LazyText . LT.fromChunks $ "constraints: " : cabalLines
  where
    cabalLines = DL.concat . DL.intersperse [",\n  "] $ DL.map renderPackage pkgs

renderAsMafiaLock :: [(Text, PackageInfo)] -> LazyText
renderAsMafiaLock pkgs =
  LazyText . LT.fromChunks $ DL.intercalate ["\n"] mafiaLines
  where
    mafiaLines = ["# mafia-lock-file-version: 0"] : DL.map renderPackage pkgs

renderPackage :: (Text, PackageInfo) -> [Text]
renderPackage (name, pkg) =
  [ name, " == ", packageVersion pkg ]