module Fly.Options where

import Options.Applicative

data PipelineType = Jobs | GroupedJobs

data InputType = File FilePath | Stdin

data Opts = Opts { pipelineType :: PipelineType, inputType :: InputType }

inputTypeParser :: Parser InputType
inputTypeParser = (File
                    <$> strOption (long "file"
                                    <> help "Optional, defaults to stdin"))
                  <|> pure Stdin

parsePipelineType :: String -> Maybe PipelineType
parsePipelineType "jobs"         = Just Jobs
parsePipelineType "grouped-jobs" = Just GroupedJobs
parsePipelineType _              = Nothing

pipelineTypeParser :: Parser PipelineType
pipelineTypeParser = option
                     (maybeReader parsePipelineType)
                     (long "pipeline-type"
                      <> help "'jobs' or 'grouped-jobs'"
                      <> value Jobs)

optsParser :: Parser Opts
optsParser = Opts <$> pipelineTypeParser <*> inputTypeParser

optsParserWithHelp :: ParserInfo Opts
optsParserWithHelp = info (optsParser <**> helper)
                     (fullDesc
                      <> progDesc "Translate dhall pipelines to yaml")