{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell   #-}

{-|
Module      : Headroom.Embedded
Description : Embedded files
Copyright   : (c) 2019-2020 Vaclav Svejcar
License     : BSD-3-Clause
Maintainer  : vaclav.svejcar@gmail.com
Stability   : experimental
Portability : POSIX

Contains contents of files embedded using the "Data.FileEmbed" module.
-}

module Headroom.Embedded
  ( configFileStub
  , defaultConfig
  , licenseTemplate
  )
where

import           Data.FileEmbed                 ( embedStringFile )
import           Headroom.Configuration.Types   ( LicenseType(..) )
import           Headroom.FileType.Types        ( FileType(..) )
import           RIO



-- | Content of dummy /YAML/ configuration file for the application.
configFileStub :: IsString a => a
configFileStub :: a
configFileStub = $(embedStringFile "embedded/config-file.yaml")


-- | Default /YAML/ configuration.
defaultConfig :: IsString a => a
defaultConfig :: a
defaultConfig = $(embedStringFile "embedded/default-config.yaml")


-- | License template for given license.
licenseTemplate :: IsString a
                => LicenseType
                -- ^ license for which to return the template
                -> FileType
                -- ^ license for which to return the template
                -> a
                -- ^ template text
licenseTemplate :: LicenseType -> FileType -> a
licenseTemplate LicenseType
licenseType FileType
fileType = case LicenseType
licenseType of
  LicenseType
Apache2 -> case FileType
fileType of
    FileType
C       -> $(embedStringFile "embedded/license/apache2/c.mustache")
    FileType
CPP     -> $(embedStringFile "embedded/license/apache2/cpp.mustache")
    FileType
CSS     -> $(embedStringFile "embedded/license/apache2/css.mustache")
    FileType
Haskell -> $(embedStringFile "embedded/license/apache2/haskell.mustache")
    FileType
HTML    -> $(embedStringFile "embedded/license/apache2/html.mustache")
    FileType
Java    -> $(embedStringFile "embedded/license/apache2/java.mustache")
    FileType
JS      -> $(embedStringFile "embedded/license/apache2/js.mustache")
    FileType
Rust    -> $(embedStringFile "embedded/license/apache2/rust.mustache")
    FileType
Scala   -> $(embedStringFile "embedded/license/apache2/scala.mustache")
    FileType
Shell   -> $(embedStringFile "embedded/license/apache2/shell.mustache")
  LicenseType
BSD3 -> case FileType
fileType of
    FileType
C       -> $(embedStringFile "embedded/license/bsd3/c.mustache")
    FileType
CPP     -> $(embedStringFile "embedded/license/bsd3/cpp.mustache")
    FileType
CSS     -> $(embedStringFile "embedded/license/bsd3/css.mustache")
    FileType
Haskell -> $(embedStringFile "embedded/license/bsd3/haskell.mustache")
    FileType
HTML    -> $(embedStringFile "embedded/license/bsd3/html.mustache")
    FileType
Java    -> $(embedStringFile "embedded/license/bsd3/java.mustache")
    FileType
JS      -> $(embedStringFile "embedded/license/bsd3/js.mustache")
    FileType
Rust    -> $(embedStringFile "embedded/license/bsd3/rust.mustache")
    FileType
Scala   -> $(embedStringFile "embedded/license/bsd3/scala.mustache")
    FileType
Shell   -> $(embedStringFile "embedded/license/bsd3/shell.mustache")
  LicenseType
GPL2 -> case FileType
fileType of
    FileType
C       -> $(embedStringFile "embedded/license/gpl2/c.mustache")
    FileType
CPP     -> $(embedStringFile "embedded/license/gpl2/cpp.mustache")
    FileType
CSS     -> $(embedStringFile "embedded/license/gpl2/css.mustache")
    FileType
Haskell -> $(embedStringFile "embedded/license/gpl2/haskell.mustache")
    FileType
HTML    -> $(embedStringFile "embedded/license/gpl2/html.mustache")
    FileType
Java    -> $(embedStringFile "embedded/license/gpl2/java.mustache")
    FileType
JS      -> $(embedStringFile "embedded/license/gpl2/js.mustache")
    FileType
Rust    -> $(embedStringFile "embedded/license/gpl2/rust.mustache")
    FileType
Scala   -> $(embedStringFile "embedded/license/gpl2/scala.mustache")
    FileType
Shell   -> $(embedStringFile "embedded/license/gpl2/shell.mustache")
  LicenseType
GPL3 -> case FileType
fileType of
    FileType
C       -> $(embedStringFile "embedded/license/gpl3/c.mustache")
    FileType
CPP     -> $(embedStringFile "embedded/license/gpl3/cpp.mustache")
    FileType
CSS     -> $(embedStringFile "embedded/license/gpl3/css.mustache")
    FileType
Haskell -> $(embedStringFile "embedded/license/gpl3/haskell.mustache")
    FileType
HTML    -> $(embedStringFile "embedded/license/gpl3/html.mustache")
    FileType
Java    -> $(embedStringFile "embedded/license/gpl3/java.mustache")
    FileType
JS      -> $(embedStringFile "embedded/license/gpl3/js.mustache")
    FileType
Rust    -> $(embedStringFile "embedded/license/gpl3/rust.mustache")
    FileType
Scala   -> $(embedStringFile "embedded/license/gpl3/scala.mustache")
    FileType
Shell   -> $(embedStringFile "embedded/license/gpl3/shell.mustache")
  LicenseType
MIT -> case FileType
fileType of
    FileType
C       -> $(embedStringFile "embedded/license/mit/c.mustache")
    FileType
CPP     -> $(embedStringFile "embedded/license/mit/cpp.mustache")
    FileType
CSS     -> $(embedStringFile "embedded/license/mit/css.mustache")
    FileType
Haskell -> $(embedStringFile "embedded/license/mit/haskell.mustache")
    FileType
HTML    -> $(embedStringFile "embedded/license/mit/html.mustache")
    FileType
Java    -> $(embedStringFile "embedded/license/mit/java.mustache")
    FileType
JS      -> $(embedStringFile "embedded/license/mit/js.mustache")
    FileType
Rust    -> $(embedStringFile "embedded/license/mit/rust.mustache")
    FileType
Scala   -> $(embedStringFile "embedded/license/mit/scala.mustache")
    FileType
Shell   -> $(embedStringFile "embedded/license/mit/shell.mustache")
  LicenseType
MPL2 -> case FileType
fileType of
    FileType
C       -> $(embedStringFile "embedded/license/mpl2/c.mustache")
    FileType
CPP     -> $(embedStringFile "embedded/license/mpl2/cpp.mustache")
    FileType
CSS     -> $(embedStringFile "embedded/license/mpl2/css.mustache")
    FileType
Haskell -> $(embedStringFile "embedded/license/mpl2/haskell.mustache")
    FileType
HTML    -> $(embedStringFile "embedded/license/mpl2/html.mustache")
    FileType
Java    -> $(embedStringFile "embedded/license/mpl2/java.mustache")
    FileType
JS      -> $(embedStringFile "embedded/license/mpl2/js.mustache")
    FileType
Rust    -> $(embedStringFile "embedded/license/mpl2/rust.mustache")
    FileType
Scala   -> $(embedStringFile "embedded/license/mpl2/scala.mustache")
    FileType
Shell   -> $(embedStringFile "embedded/license/mpl2/shell.mustache")