/**
 * 
 */
package fr.emse.gitlab.saref;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

/**
 * @author Omar Qawasmeh
 *
 */
public class CMDConfigurations {

	public static final String ARG_HELP = "h";
	public static final String ARG_HELP_LONG = "help";
	public static final String ARG_HELP_MAN = "Show help";
	
	public static final String ARG_INIT = "i";
	public static final String ARG_INIT_LONG = "init";
	public static final String ARG_INIT_MAN = "Initialize a new SAREF extension development in the current directory";

	public static final String ARG_DIRECTORY = "d";
	public static final String ARG_DIRECTORY_DEFAULT = "";	
	public static final String ARG_DIRECTORY_LONG = "dir";
	public static final String ARG_DIRECTORY_MAN = "Location of the SAREF extension directory (default is .)";

	public static final String ARG_REMOTE_ONLY = "r";
	public static final String ARG_REMOTE_ONLY_LONG = "remote-only";
	public static final String ARG_REMOTE_ONLY_MAN = "Do not check the directory itself. Only consider the repositories listed in the `.saref-repositories.yml` document. Used to generate the website for several extensions.";

	public static final String ARG_IGNORE_GIT = "g";
	public static final String ARG_IGNORE_GIT_LONG = "no-git";
	public static final String ARG_IGNORE_GIT_MAN = "Only check the current state of the repository";

	public static final String ARG_IGNORE_EXAMPLES = "e";
	public static final String ARG_IGNORE_EXAMPLES_LONG = "ignore-examples";
	public static final String ARG_IGNORE_EXAMPLES_MAN = "Only check the SAREF extension ontology. Ignore the examples.";

	public static final String ARG_NO_SITE = "s";
	public static final String ARG_NO_SITE_LONG = "no-site";
	public static final String ARG_NO_SITE_MAN = "Do not generate the static website";

	public static final String ARG_IGNORE_TERMS = "t";
	public static final String ARG_IGNORE_TERMS_LONG = "no-terms";
	public static final String ARG_IGNORE_TERMS_MAN = "Do not generate the website for terms";
	
	public static final String ARG_INCLUDE_MASTER = "m";
	public static final String ARG_INCLUDE_MASTER_LONG = "master";
	public static final String ARG_INCLUDE_MASTER_MAN = "Check the master branches of the remote repositories listed in the `.saref-repositories.yml` document";

	public static final String ARG_VERBOSE = "v";
	public static final String ARG_VERBOSE_LONG = "verbose";
	public static final String ARG_VERBOSE_MAN = "Use verbose mode. (For example, use SPARQL-Generate in --debug-template mode when generating the documentation)";
	
	public static CommandLine parseArguments(String[] args) throws ParseException {
		DefaultParser commandLineParser = new DefaultParser();
		CommandLine cl = commandLineParser.parse(getCMDOptions(), args);
		return cl;
	}

	public static Options getCMDOptions() {
		return new Options().addOption(ARG_HELP, ARG_HELP_LONG, false, ARG_HELP_MAN)
//				.addOption(ARG_INIT, ARG_INIT_LONG, true, ARG_INIT_MAN)
				.addOption(ARG_DIRECTORY, ARG_DIRECTORY_LONG, true, ARG_DIRECTORY_MAN)
				.addOption(ARG_REMOTE_ONLY, ARG_REMOTE_ONLY_LONG, false, ARG_REMOTE_ONLY_MAN)
				.addOption(ARG_IGNORE_EXAMPLES, ARG_IGNORE_EXAMPLES_LONG, false, ARG_IGNORE_EXAMPLES_MAN)
				.addOption(ARG_IGNORE_TERMS, ARG_IGNORE_TERMS_LONG, false, ARG_IGNORE_TERMS_MAN)
				.addOption(ARG_IGNORE_GIT, ARG_IGNORE_GIT_LONG, false, ARG_IGNORE_GIT_MAN)
				.addOption(ARG_NO_SITE, ARG_NO_SITE_LONG, false, ARG_NO_SITE_MAN)
				.addOption(ARG_INCLUDE_MASTER, ARG_INCLUDE_MASTER_LONG, false, ARG_INCLUDE_MASTER_MAN)
				.addOption(ARG_VERBOSE, ARG_VERBOSE_LONG, false, ARG_VERBOSE_MAN);
	}

	public static void displayHelp() {
		HelpFormatter formatter = new HelpFormatter();
		formatter.printHelp("java -jar saref-pipeline.jar", getCMDOptions());
		System.exit(-1);
	}

}
