module Network.CloudSeeder.CommandLine
    ( Command(..)
    , commandParser
    ) where

import Data.Semigroup ((<>))
import Options.Applicative (Parser, Mod, OptionFields, subparser, command, info, progDesc, strOption, long, metavar, help)
import qualified Data.Text as T

data Command = DeployStack T.Text
  deriving (Eq, Show)

textOption :: Mod OptionFields String -> Parser T.Text
textOption = fmap T.pack . strOption

commandParser :: Parser Command
commandParser = subparser $ command "deploy" (info (DeployStack <$> stackName) (progDesc "deploy a stack"))
  where
    stackName :: Parser T.Text
    stackName = textOption
       ( long "stack-name"
      <> metavar "STACK_NAME"
      <> help "the name of the stack in the configuration")