module Language.PureScript.Interactive.Message where

import           Prelude

import           Data.List (intercalate)
import           Data.Version (showVersion)
import qualified Paths_purescript as Paths
import qualified Language.PureScript.Interactive.Directive as D
import           Language.PureScript.Interactive.Types

-- Messages

-- | The guide URL
guideURL :: String
guideURL :: [Char]
guideURL = [Char]
"https://github.com/purescript/documentation/blob/master/guides/PSCi.md"

-- | The help message.
helpMessage :: String
helpMessage :: [Char]
helpMessage = [Char]
"The following commands are available:\n\n    " forall a. [a] -> [a] -> [a]
++
  forall a. [a] -> [[a]] -> [a]
intercalate [Char]
"\n    " (forall a b. (a -> b) -> [a] -> [b]
map (Directive, [Char], [Char]) -> [Char]
line [(Directive, [Char], [Char])]
D.help) forall a. [a] -> [a] -> [a]
++
  [Char]
"\n\n" forall a. [a] -> [a] -> [a]
++ [Char]
extraHelp
  where
  line :: (Directive, String, String) -> String
  line :: (Directive, [Char], [Char]) -> [Char]
line (Directive
dir, [Char]
arg, [Char]
desc) =
    let cmd :: [Char]
cmd = Char
':' forall a. a -> [a] -> [a]
: Directive -> [Char]
D.stringFor Directive
dir
    in [[Char]] -> [Char]
unwords [ [Char]
cmd
               , forall a. Int -> a -> [a]
replicate (Int
11 forall a. Num a => a -> a -> a
- forall (t :: * -> *) a. Foldable t => t a -> Int
length [Char]
cmd) Char
' '
               , [Char]
arg
               , forall a. Int -> a -> [a]
replicate (Int
11 forall a. Num a => a -> a -> a
- forall (t :: * -> *) a. Foldable t => t a -> Int
length [Char]
arg) Char
' '
               , [Char]
desc
               ]

  extraHelp :: [Char]
extraHelp =
    [Char]
"Further information is available on the PureScript documentation repository:\n" forall a. [a] -> [a] -> [a]
++
    [Char]
" --> " forall a. [a] -> [a] -> [a]
++ [Char]
guideURL

-- | The welcome prologue.
prologueMessage :: String
prologueMessage :: [Char]
prologueMessage = [[Char]] -> [Char]
unlines
  [ [Char]
"PSCi, version " forall a. [a] -> [a] -> [a]
++ Version -> [Char]
showVersion Version
Paths.version
  , [Char]
"Type :? for help"
  ]

noInputMessage :: String
noInputMessage :: [Char]
noInputMessage = [[Char]] -> [Char]
unlines
  [ [Char]
"purs repl: No input files; try running `pulp psci` instead."
  , [Char]
"For help getting started, visit " forall a. [a] -> [a] -> [a]
++ [Char]
guideURL
  , [Char]
"Usage: For basic information, try the `--help' option."
  ]

supportModuleMessage :: String
supportModuleMessage :: [Char]
supportModuleMessage = [[Char]] -> [Char]
unlines
  [ [Char]
"purs repl: PSCi requires the psci-support package."
  , [Char]
"For help getting started, visit " forall a. [a] -> [a] -> [a]
++ [Char]
guideURL
  ]

-- | The quit message.
quitMessage :: String
quitMessage :: [Char]
quitMessage = [Char]
"See ya!"