package ru.gravit.launchserver.console;

import ru.gravit.launcher.server.ServerWrapper;
import ru.gravit.utils.command.CommandHandler;
import ru.gravit.utils.command.JLineCommandHandler;
import ru.gravit.utils.command.StdCommandHandler;
import ru.gravit.utils.command.basic.HelpCommand;
import ru.gravit.utils.helper.LogHelper;

import java.io.IOException;

public class ConsoleMain {
    public static CommandHandler commandHandler;

    public static void main(String[] args) throws IOException {
        if (ServerWrapper.wrapper.config == null) {
            LogHelper.warning("ServerWrapper not found");
        }
        if (!ServerWrapper.wrapper.permissions.canAdmin) {
            LogHelper.warning("Permission canAdmin not found");
        }
        try {
            Class.forName("jline.Terminal");

            // JLine2 available
            commandHandler = new JLineCommandHandler();
            LogHelper.info("JLine2 terminal enabled");
        } catch (ClassNotFoundException ignored) {
            commandHandler = new StdCommandHandler(true);
            LogHelper.warning("JLine2 isn't in classpath, using std");
        }
        registerCommands();
        LogHelper.info("CommandHandler started. Use 'exit' to exit this console");
        commandHandler.run();
    }
    public static void registerCommands()
    {
        commandHandler.registerCommand("help", new HelpCommand(commandHandler));
        commandHandler.registerCommand("exit", new ExitCommand());
        commandHandler.registerCommand("logListener", new LogListenerCommand());
        commandHandler.registerCommand("exec", new ExecCommand());
    }
}