module Main where

import SimpleFormulaChecker (compareSpec)
import Data.Semigroup ((<>))
import Options.Applicative
import Control.Monad

-- | Command-line options.
data Options = Options
  { src :: String
  , method1 :: String
  , method2 :: String
  }

-- | Parsing of command-line options.
parseOptions :: Parser Options
parseOptions = Options
  <$> option auto
      (  long "src"
      <> showDefault
      <> value "examples/javawlp_edsl/src/nl/uu/javawlp_edsl/Main.java"
      <> metavar "STRING"
      <> help "Java source file"
      )
  <*> strOption
      (  short 'a'
      <> metavar "STRING"
      <> help "First method"
      )
  <*> strOption
      (  short 'b'
      <> metavar "STRING"
      <> help "Second method"
      )

withInfo :: Parser a -> String -> ParserInfo a
withInfo opts desc = info (helper <*> opts) $ progDesc desc

-- | Main.
main :: IO ()
main = run =<< execParser (parseOptions `withInfo` "Java WLP")

-- | Run.

run :: Options -> IO ()
run (Options src method1 method2) = void $
  compareSpec (src, method1) (src, method2)