{-|
Module      : Main.hs
Description : Gargantext starter
Copyright   : (c) CNRS, 2017-Present
License     : AGPL + CECILL v3
Maintainer  : team@gargantext.org
Stability   : experimental
Portability : POSIX

Main specifications to index a corpus with a term list

 -}

{-# LANGUAGE LambdaCase       #-}
{-# LANGUAGE Strict           #-}
{-# LANGUAGE TypeApplications #-}

module Main where


import CLI.Admin (adminCLI, adminCmd)
import CLI.FileDiff (fileDiffCLI, fileDiffCmd)
import CLI.FilterTermsAndCooc
import CLI.Import (importCLI, importCmd)
import CLI.Ini (iniCLI, iniCmd)
import CLI.Init (initCLI, initCmd)
import CLI.Invitations (invitationsCLI, invitationsCmd)
import CLI.ObfuscateDB (obfuscateDB, obfuscateDBCmd)
import CLI.Phylo (phyloCLI, phyloCmd)
import CLI.Phylo.Profile (phyloProfileCLI, phyloProfileCmd)
import CLI.Server (serverCLI, serverCmd)
import CLI.Server.Routes (routesCLI, routesCmd)
import CLI.Types
import CLI.Upgrade (upgradeCLI, upgradeCmd)
import CLI.Worker (workerCLI, workerCmd)
import Options.Applicative
import Prelude


runCLI :: CLI -> IO ()
runCLI = \case
  CLISub CCMD_clean_csv_corpus
    -> putStrLn "TODO."
  CLISub (CCMD_filter_terms_and_cooc corpusFile termListFile outputFile)
    -> filterTermsAndCoocCLI corpusFile termListFile outputFile
  CLISub (CCMD_obfuscate_db args)
    -> obfuscateDB args
  CLISub (CCMD_admin args)
    -> adminCLI args
  CLISub (CCMD_import args)
    -> importCLI args
  CLISub (CCMD_ini args)
    -> iniCLI args
  CLISub (CCMD_init args)
    -> initCLI args
  CLISub (CCMD_invitations args)
    -> invitationsCLI args
  CLISub (CCMD_phylo args)
    -> phyloCLI args
  CLISub CCMD_phylo_profile
    -> phyloProfileCLI
  CLISub (CCMD_upgrade args)
    -> upgradeCLI args
  CLISub (CCMD_golden_file_diff args)
    -> fileDiffCLI args
  CLISub (CCMD_routes args)
    -> routesCLI args
  CLISub (CCMD_server args)
    -> serverCLI args
  CLISub (CCMD_worker args)
    -> workerCLI args


main :: IO ()
main = runCLI =<< execParser opts
  where
    opts = info (helper <*> allOptions)
      ( fullDesc
     <> progDesc "CLI for the gargantext-server. Type --help for all the commands."
     <> header "gargantext tools" )

allOptions :: Parser CLI
allOptions = subparser (
                 filterTermsAndCoocCmd <>
                 obfuscateDBCmd <>
                 adminCmd <>
                 importCmd <>
                 iniCmd <>
                 initCmd <>
                 invitationsCmd <>
                 phyloCmd <>
                 phyloProfileCmd <>
                 upgradeCmd <>
                 fileDiffCmd <>
                 routesCmd <>
                 serverCmd <>
                 workerCmd
                 )