{-# language OverloadedStrings #-}
module Hinfo
  (
    app
  , execute
  ) where

import Options.Applicative                (execParser)
import Hinfo.Hpack
import Hinfo.Options
import System.Exit
import qualified Data.Text as T
import qualified Data.Text.IO as T

app :: IO ()
app = do
  options <- execParser appOpts
  packageFile <- loadDefault
  execute options packageFile


execute :: AppOption -> PackageFile -> IO ()
execute Name              pf = T.putStrLn $ packageName pf
execute Version           pf = T.putStrLn $ packageVersion pf
execute Github            pf = maybe (die "Missing Github") T.putStrLn (packageGithub pf)
execute Author            pf = maybe (die "Missing Author") T.putStrLn (packageAuthor pf)
execute Maintainer        pf = maybe (die "Missing Maintainer") T.putStrLn (packageMaintainer pf)
execute Copyright         pf = maybe (die "Mising Copyright") T.putStrLn (packageCopyright pf)
execute ExtraSourceFiles  pf = maybe (die "Missing Extra Source Files") (T.putStrLn . T.intercalate "\n") (packageExtraSourceFiles pf)
execute Synopsis          pf = maybe (die "Missing Synopsis") T.putStrLn (packageSynopsis pf)
execute Category          pf = maybe (die "Missing Category") T.putStrLn (packageCategory pf)
execute Description       pf = maybe (die "Missing Description") T.putStrLn $ packageDescription pf
execute Dependencies      pf = T.putStrLn $ T.intercalate ", " $ packageDependencies pf