module Roller.CLI (
  CLI(..)
, withOpts
) where

import Options.Applicative hiding (Const)
import Control.Applicative

type CLI a = Bool -> Int -> [String] -> a

withOpts :: CLI a -> IO a
withOpts f = execParser . info (helper <*> handleOpts) $ infoMod
  where
  handleOpts =
    f <$> switch ( long "verbose"
                <> short 'v'
                <> help "List out each roll")
      <*> option auto ( long "nrolls"
                <> value 1
                <> short 'n'
                <> help "Number of times to roll the expression")
      <*> some (argument str (metavar "EXPR.." <> help "Dice expressions"))
  infoMod = fullDesc <> progDesc "Roll some dice"