{-# LANGUAGE NamedFieldPuns #-}
module Hi where

import           Hi.Compiler (compile)
import           Hi.FilePath (toDestionationPath)
import           Hi.Context  (context)
import           Hi.Types
import           Hi.Template (withTemplatesFromRepo)
import           Control.Arrow        ((&&&))
import           Control.Monad
import           System.Directory     (createDirectoryIfMissing,
                                       getCurrentDirectory)
import           System.FilePath      (joinPath, dropFileName)

-- | Main function
cli :: InitFlags -> IO ()
cli initFlags@(InitFlags {repository}) = do
    currentDirecotory <- getCurrentDirectory

    putStrLn $ "Creating new project from repository: " ++ repository

    withTemplatesFromRepo repository $ \templates -> do

      let sourceAndDestinations = map (id &&& toDestionationPath initFlags) templates

      forM_ sourceAndDestinations $ \(src,dst) -> do
        let dst' = joinPath [currentDirecotory, dst]
        createDirectoryIfMissing True $ dropFileName dst'
        putStrLn $ "    " ++ green "create" ++ "  " ++ dst
        compile src dst' $ context initFlags

green :: String -> String
green x = "\x1b[32m" ++ x ++ "\x1b[0m"