module Main where

import qualified Data.ByteString.Lazy as B
import qualified Data.ByteString.Lazy.Char8 as C8
import Options.Applicative
import Text.Jasmine

data Options = Options {
    inputFile :: String
  , outputFile :: Maybe String
  }

options :: Parser Options
options = Options 
      <$> argument str (metavar "INPUT_FILE"
                     <> help "The unminified, original JavaScript file")
      <*> optional (
            strOption (long "output-file"
                    <> short 'o'
                    <> metavar "OUTPUT_FILE"
                    <> help "The minified output file. Default: stdout"))

main :: IO ()
main = execParser opts >>= minify'
  where
    opts = info (helper <*> options)
      ( fullDesc
     <> progDesc "Minify JavaScript files."
     <> header "hjsmin - a simple command-line interface to the 'hjsmin' library" )

minify' :: Options -> IO ()
minify' o = do
  minified <- minifyFile (inputFile o)
  case outputFile o of
    Nothing -> C8.putStrLn $ minified
    Just f  -> B.writeFile f minified