module Conferer.Provider.Dhall where

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

import           Conferer.Types

mkDhallProvider :: ProviderCreator
mkDhallProvider 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
        mkJsonProvider' jsonConfig config
      Left compileError -> error (show compileError)
    else do
      mkNullProvider config