-- | Common args and parser.

module OrgStat.CLI
       ( CommonArgs (..)
       , parseCommonArgs
       ) where

import Universum

import Options.Applicative.Simple (Parser, help, long, metavar, strOption, switch)

-- | Read-only arguments that inner application needs (in contrast to,
-- say, logging severity).
data CommonArgs = CommonArgs
    { caXdgOpen   :: !Bool
      -- ^ Open report types using xdg-open
    , caOutputs   :: ![Text]
      -- ^ Single output can be selected instead of running all of them.
    , caOutputDir :: !(Maybe FilePath)
      -- ^ Output directory for all ... outputs.
    } deriving Show

parseCommonArgs :: Parser CommonArgs
parseCommonArgs =
    CommonArgs <$>
    switch (long "xdg-open" <> help "Open each report using xdg-open") <*>
    many (
        fromString <$>
        strOption (long "output" <>
                   long "select-output" <>
                   help ("Output name(s) you want to process " <>
                         "(by default all outputs from conf are selected)"))) <*>
    optional (
        strOption (long "output-dir" <>
                   metavar "FILEPATH" <>
                   help ("Final output directory that overrides one in config. " <>
                         "No extra subdirectories will be created!")))