module Data.Morpheus.Execution.Internal.Utils
  ( capital
  , nonCapital
  , nameSpaceWith
  , nameSpaceType
  , nameSpaceTypeString
  )
where

import           Data.Char                      ( toLower
                                                , toUpper
                                                )
import           Data.Semigroup                 ( (<>) )
import           Data.Text                      ( Text
                                                , unpack
                                                )


nameSpaceTypeString :: [String] -> String -> String
nameSpaceTypeString list name = concatMap capital (list <> [name])

nameSpaceType :: [Text] -> Text -> String
nameSpaceType list name = concatMap (capital . unpack) (list <> [name])

nameSpaceWith :: String -> String -> String
nameSpaceWith nSpace name = nonCapital nSpace <> capital name

nonCapital :: String -> String
nonCapital []       = []
nonCapital (x : xs) = toLower x : xs

capital :: String -> String
capital []       = []
capital (x : xs) = toUpper x : xs