module Hinfo.Options.Internal.Types where

import Options.Applicative

data AppOption = Name
                | Version
                | Github
                | Author
                | Maintainer
                | Copyright
                | ExtraSourceFiles
                | Synopsis
                | Category
                | Description
                | Dependencies


appOpts :: ParserInfo AppOption
appOpts = info(appOptionParser <**> helper)
  ( fullDesc
  <> progDesc "Report Information On A Haskell App"
  <> header "hinfo - information on haskell apps")

appOptionParser :: Parser AppOption
appOptionParser = nameInput
  <|> versionInput
  <|> githubInput
  <|> authorInput
  <|> maintainerInput
  <|> copyrightInput
  <|> extraSourceFilesInput
  <|> synopsisInput
  <|> categoryInput
  <|> descriptionInput
  <|> dependenciesInput

nameInput :: Parser AppOption
nameInput = flag' Name
  ( long "name" <> short 'n' <> help "Report Application Name")

versionInput :: Parser AppOption
versionInput = flag' Version
  ( long "version" <> short 'v' <> help "Report Application Version")

githubInput :: Parser AppOption
githubInput = flag' Github
  (long "github" <> help "Report Github Repository")


authorInput :: Parser AppOption
authorInput = flag' Author
  (long "author" <> help "Report Author")

maintainerInput :: Parser AppOption
maintainerInput = flag' Maintainer
  (long "maintainer" <> help "Report Maintainer")

copyrightInput :: Parser AppOption
copyrightInput = flag' Copyright
  (long "copyright" <> help "Report Copyright Holder")

extraSourceFilesInput :: Parser AppOption
extraSourceFilesInput = flag' ExtraSourceFiles
  (long "extra-source-files" <> help "Report Extra Source Files")

synopsisInput :: Parser AppOption
synopsisInput = flag' Synopsis
  (long "synopsis" <> help "Report Synopsis")

categoryInput :: Parser AppOption
categoryInput = flag' Category
  (long "category" <> help "Report Category")

descriptionInput :: Parser AppOption
descriptionInput = flag' Description
  (long "description" <> help "Report Application Description")

dependenciesInput :: Parser AppOption
dependenciesInput = flag' Dependencies
  (long "dependencies" <> help "Report Dependencies")