/*
 *
 * Keeblarcraft
 *
 * This is the primary server side "main" object that is referenced by Fabric. This is where everything is setup for the mod
 * and a very important class. Please becareful as you add to it
 *
*/

// color colour

package jesse.keeblarcraft;

import net.fabricmc.api.ModInitializer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import jesse.keeblarcraft.Commands.CustomCommandManager;
import jesse.keeblarcraft.Utils.CustomExceptions.SETUP_FAILED_EXCEPTION;
import jesse.keeblarcraft.Utils.ChatUtil;
import jesse.keeblarcraft.Utils.Setup;
import jesse.keeblarcraft.Utils.ChatUtil.CONSOLE_COLOR;

// import com.mojang.brigadier.Command;


public class Keeblarcraft implements ModInitializer {
    // This logger is used to write text to the console and the log file.
    // It is considered best practice to use your mod id as the logger's name.
    // That way, it's clear which mod wrote info, warnings, and errors.
    public static final Logger LOGGER = LoggerFactory.getLogger("keeblarcraft");
    CustomCommandManager cmdMgr = new CustomCommandManager();

    Setup setup = Setup.GetInstance();

    @Override
    public void onInitialize() {
        // This code runs as soon as Minecraft is in a mod-load-ready state.
        // However, some things (like resources) may still be uninitialized.
        // Proceed with mild caution.
        ChatUtil.LoggerColored("Hello Fabric world!", CONSOLE_COLOR.CYAN, LOGGER);

        if (setup != null) {
            try {
                // Run setup. If setup fails; it throws SETUP_FAILED_EXCEPTION
                LOGGER.info("\033[34m Running setup stage \033[0m");
                setup.RunSetup();

                // Run command registrations from the command manager
                LOGGER.info("\033[34m Running command registration \033[0m");
                cmdMgr.RegisterCustomCommands();

            } catch (SETUP_FAILED_EXCEPTION e) {
                System.out.println(ChatUtil.ColoredString("ERROR. Setup failed to initialize environment. Mod likely does not have read/write permissions inside area. Mod will now close out.", CONSOLE_COLOR.RED));
                e.printStackTrace();
            }
        } else {
            // Program exit. Dual definition of setup somehow happened!
            System.out.println(ChatUtil.ColoredString("Dual definition of singleton attempted! Out of order initialization? How did this even happen?", CONSOLE_COLOR.RED));
        }
    }
}