{-|
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 Strict             #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE TypeApplications #-}

module Main where

import Prelude

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

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_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


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-cli tools" )

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