{- |
Copyright: (c) 2017-2019 Kowainik
SPDX-License-Identifier: MPL-2.0
Maintainer: Kowainik <xrom.xkov@gmail.com>

This module contains functions for the Haskell project template creation.
-}

module Summoner.Template
       ( createProjectTemplate
       ) where

import Summoner.Settings (Settings (..))
import Summoner.Template.Cabal (cabalFile)
import Summoner.Template.Doc (docFiles)
import Summoner.Template.GitHub (gitHubFiles)
import Summoner.Template.Haskell (haskellFiles)
import Summoner.Template.Stack (stackFiles)
import Summoner.Tree (TreeFs (..), insertTree)


-- | Creating tree structure of the project.
createProjectTemplate :: Settings -> TreeFs
createProjectTemplate :: Settings -> TreeFs
createProjectTemplate settings :: Settings
settings@Settings{..} = FilePath -> [TreeFs] -> TreeFs
Dir
    (Text -> FilePath
forall a. ToString a => a -> FilePath
toString Text
settingsRepo)
    ((TreeFs -> [TreeFs] -> [TreeFs])
-> [TreeFs] -> [TreeFs] -> [TreeFs]
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr TreeFs -> [TreeFs] -> [TreeFs]
insertTree [TreeFs]
generatedFiles [TreeFs]
settingsFiles)
  where
    generatedFiles :: [TreeFs]
    generatedFiles :: [TreeFs]
generatedFiles = [[TreeFs]] -> [TreeFs]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
        [ [TreeFs]
cabal
        , [TreeFs]
stack
        , [TreeFs]
haskell
        , [TreeFs]
docs
        , [TreeFs]
gitHub
        ]

    cabal, stack :: [TreeFs]
    cabal :: [TreeFs]
cabal = [Settings -> TreeFs
cabalFile Settings
settings]
    stack :: [TreeFs]
stack = Bool -> [TreeFs] -> [TreeFs]
forall m. Monoid m => Bool -> m -> m
memptyIfFalse Bool
settingsStack ([TreeFs] -> [TreeFs]) -> [TreeFs] -> [TreeFs]
forall a b. (a -> b) -> a -> b
$ Settings -> [TreeFs]
stackFiles Settings
settings

    haskell, docs, gitHub :: [TreeFs]
    haskell :: [TreeFs]
haskell = Settings -> [TreeFs]
haskellFiles Settings
settings
    docs :: [TreeFs]
docs    = Settings -> [TreeFs]
docFiles Settings
settings
    gitHub :: [TreeFs]
gitHub  = Settings -> [TreeFs]
gitHubFiles Settings
settings