module Rob.Actions.New (main) where import Rob.Logger (err, success) import Rob.Config (get, errorNoTemplatesAvailable) import Rob.Types (Config(..)) import Rob.Questionnaire (run) import Rob.Project (getTemplatePathByName, getTemplateName, createFilesFromTemplate) import Rob.UserMessages ( choseATemplate, noTemplateSelected, projectSuccessfullyCreated, projectPathDoesNotExist, emptyString ) import System.Exit (exitFailure, exitSuccess) import System.Directory (doesPathExist) import FortyTwo (select) main :: IO () main = do config <- get createNewProject config -- | Create a new project using one of the templates available createNewProject :: Config -> IO () createNewProject (Config []) = errorNoTemplatesAvailable createNewProject (Config templates) = do templateName <- select choseATemplate $ map getTemplateName templates putStrLn emptyString if not . null $ templateName then do let path = getTemplatePathByName templates templateName hasProjectPath <- doesPathExist path if hasProjectPath then do responses <- run path putStrLn emptyString createFilesFromTemplate path responses success projectSuccessfullyCreated exitSuccess else do err $ projectPathDoesNotExist path exitFailure else do err noTemplateSelected exitFailure