module Conferer.Source.Dhall where

import qualified Data.Text.IO as Text
import           Dhall
import           Dhall.JSON
import           System.Directory (doesFileExist)
import           Conferer.Source.JSON
import           Conferer.Source.Files
import           Conferer.Source.Null

import           Conferer.Types

mkDhallSource :: SourceCreator
mkDhallSource config = do
  filePath <- getFilePathFromEnv config "dhall"
  fileExists <- doesFileExist filePath
  if fileExists
    then do
    fileContent <- Text.readFile filePath
    dahllExpr <- inputExpr fileContent
    case dhallToJSON dahllExpr of
      Right jsonConfig -> do
        mkJsonSource' jsonConfig config
      Left compileError -> error (show compileError)
    else do
      mkNullSource config