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

{-|
Module      : Headroom.Embedded
Description : Embedded files
Copyright   : (c) 2019-2022 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
  , defaultGlobalConfig
  , licenseTemplate
  )
where

import           Headroom.Config.Types               ( LicenseType(..) )
import           Headroom.Embedded.TH                ( embedConfigFile
                                                     , embedDefaultConfig
                                                     , embedDefaultGlobalConfig
                                                     , embedTemplate
                                                     )
import           Headroom.FileType.Types             ( FileType(..) )
import           RIO


-- | Content of dummy /YAML/ configuration file for the application.
configFileStub :: IsString a => a
configFileStub :: a
configFileStub = $([Char]
[Char] -> a
forall a. IsString a => [Char] -> a
embedConfigFile)


-- | Default /YAML/ configuration.
defaultConfig :: IsString a => a
defaultConfig :: a
defaultConfig = $([Char]
[Char] -> a
forall a. IsString a => [Char] -> a
embedDefaultConfig)


-- | Default /YAML/ configuration for the global configuration file.
defaultGlobalConfig :: IsString a => a
defaultGlobalConfig :: a
defaultGlobalConfig = $([Char]
[Char] -> a
forall a. IsString a => [Char] -> a
embedDefaultGlobalConfig)


-- | 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          -> $(embedTemplate Apache2 C)
    FileType
CPP        -> $(embedTemplate Apache2 CPP)
    FileType
CSS        -> $(embedTemplate Apache2 CSS)
    FileType
Dart       -> $(embedTemplate Apache2 Dart)
    FileType
Go         -> $(embedTemplate Apache2 Go)
    FileType
Haskell    -> $(embedTemplate Apache2 Haskell)
    FileType
HTML       -> $(embedTemplate Apache2 HTML)
    FileType
Java       -> $(embedTemplate Apache2 Java)
    FileType
JS         -> $(embedTemplate Apache2 JS)
    FileType
Kotlin     -> $(embedTemplate Apache2 Kotlin)
    FileType
PHP        -> $(embedTemplate Apache2 PHP)
    FileType
PureScript -> $(embedTemplate Apache2 PureScript)
    FileType
Rust       -> $(embedTemplate Apache2 Rust)
    FileType
Scala      -> $(embedTemplate Apache2 Scala)
    FileType
Shell      -> $(embedTemplate Apache2 Shell)
  LicenseType
BSD3 -> case FileType
fileType of
    FileType
C          -> $(embedTemplate BSD3 C)
    FileType
CPP        -> $(embedTemplate BSD3 CPP)
    FileType
CSS        -> $(embedTemplate BSD3 CSS)
    FileType
Dart       -> $(embedTemplate BSD3 Dart)
    FileType
Go         -> $(embedTemplate BSD3 Go)
    FileType
Haskell    -> $(embedTemplate BSD3 Haskell)
    FileType
HTML       -> $(embedTemplate BSD3 HTML)
    FileType
Java       -> $(embedTemplate BSD3 Java)
    FileType
JS         -> $(embedTemplate BSD3 JS)
    FileType
Kotlin     -> $(embedTemplate BSD3 Kotlin)
    FileType
PHP        -> $(embedTemplate BSD3 PHP)
    FileType
PureScript -> $(embedTemplate BSD3 PureScript)
    FileType
Rust       -> $(embedTemplate BSD3 Rust)
    FileType
Scala      -> $(embedTemplate BSD3 Scala)
    FileType
Shell      -> $(embedTemplate BSD3 Shell)
  LicenseType
GPL2 -> case FileType
fileType of
    FileType
C          -> $(embedTemplate GPL2 C)
    FileType
CPP        -> $(embedTemplate GPL2 CPP)
    FileType
CSS        -> $(embedTemplate GPL2 CSS)
    FileType
Dart       -> $(embedTemplate GPL2 Dart)
    FileType
Go         -> $(embedTemplate GPL2 Go)
    FileType
Haskell    -> $(embedTemplate GPL2 Haskell)
    FileType
HTML       -> $(embedTemplate GPL2 HTML)
    FileType
Java       -> $(embedTemplate GPL2 Java)
    FileType
JS         -> $(embedTemplate GPL2 JS)
    FileType
Kotlin     -> $(embedTemplate GPL2 Kotlin)
    FileType
PHP        -> $(embedTemplate GPL2 PHP)
    FileType
PureScript -> $(embedTemplate GPL2 PureScript)
    FileType
Rust       -> $(embedTemplate GPL2 Rust)
    FileType
Scala      -> $(embedTemplate GPL2 Scala)
    FileType
Shell      -> $(embedTemplate GPL2 Shell)
  LicenseType
GPL3 -> case FileType
fileType of
    FileType
C          -> $(embedTemplate GPL3 C)
    FileType
CPP        -> $(embedTemplate GPL3 CPP)
    FileType
CSS        -> $(embedTemplate GPL3 CSS)
    FileType
Dart       -> $(embedTemplate GPL3 Dart)
    FileType
Go         -> $(embedTemplate GPL3 Go)
    FileType
Haskell    -> $(embedTemplate GPL3 Haskell)
    FileType
HTML       -> $(embedTemplate GPL3 HTML)
    FileType
Java       -> $(embedTemplate GPL3 Java)
    FileType
JS         -> $(embedTemplate GPL3 JS)
    FileType
Kotlin     -> $(embedTemplate GPL3 Kotlin)
    FileType
PHP        -> $(embedTemplate GPL3 PHP)
    FileType
PureScript -> $(embedTemplate GPL3 PureScript)
    FileType
Rust       -> $(embedTemplate GPL3 Rust)
    FileType
Scala      -> $(embedTemplate GPL3 Scala)
    FileType
Shell      -> $(embedTemplate GPL3 Shell)
  LicenseType
MIT -> case FileType
fileType of
    FileType
C          -> $(embedTemplate MIT C)
    FileType
CPP        -> $(embedTemplate MIT CPP)
    FileType
CSS        -> $(embedTemplate MIT CSS)
    FileType
Dart       -> $(embedTemplate MIT Dart)
    FileType
Go         -> $(embedTemplate MIT Go)
    FileType
Haskell    -> $(embedTemplate MIT Haskell)
    FileType
HTML       -> $(embedTemplate MIT HTML)
    FileType
Java       -> $(embedTemplate MIT Java)
    FileType
JS         -> $(embedTemplate MIT JS)
    FileType
Kotlin     -> $(embedTemplate MIT Kotlin)
    FileType
PHP        -> $(embedTemplate MIT PHP)
    FileType
PureScript -> $(embedTemplate MIT PureScript)
    FileType
Rust       -> $(embedTemplate MIT Rust)
    FileType
Scala      -> $(embedTemplate MIT Scala)
    FileType
Shell      -> $(embedTemplate MIT Shell)
  LicenseType
MPL2 -> case FileType
fileType of
    FileType
C          -> $(embedTemplate MPL2 C)
    FileType
CPP        -> $(embedTemplate MPL2 CPP)
    FileType
CSS        -> $(embedTemplate MPL2 CSS)
    FileType
Dart       -> $(embedTemplate MPL2 Dart)
    FileType
Go         -> $(embedTemplate MPL2 Go)
    FileType
Haskell    -> $(embedTemplate MPL2 Haskell)
    FileType
HTML       -> $(embedTemplate MPL2 HTML)
    FileType
Java       -> $(embedTemplate MPL2 Java)
    FileType
JS         -> $(embedTemplate MPL2 JS)
    FileType
Kotlin     -> $(embedTemplate MPL2 Kotlin)
    FileType
PHP        -> $(embedTemplate MPL2 PHP)
    FileType
PureScript -> $(embedTemplate MPL2 PureScript)
    FileType
Rust       -> $(embedTemplate MPL2 Rust)
    FileType
Scala      -> $(embedTemplate MPL2 Scala)
    FileType
Shell      -> $(embedTemplate MPL2 Shell)