package gtPlusPlus.api.objects;

import org.apache.logging.log4j.LogManager;

import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.relauncher.FMLRelaunchLog;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.proxy.ClientProxy;

public class Logger {
	
	public Logger(String string) {
		
	}

	// Logging Functions
	public static final org.apache.logging.log4j.Logger modLogger = Logger.makeLogger();

	// Generate GT++ Logger
	public static org.apache.logging.log4j.Logger makeLogger() {
		final org.apache.logging.log4j.Logger gtPlusPlusLogger = LogManager.getLogger("GT++");
		return gtPlusPlusLogger;
	}

	public static final org.apache.logging.log4j.Logger getLogger(){
		return modLogger;
	}

	// Non-Dev Comments
	public static void INFO(final String s) {
		modLogger.info(s);
	}

	// Non-Dev Comments
	public static void MACHINE_INFO(final String s) {
	
		boolean localPlayer = false;
		try {
			if (ClientProxy.playerName != null){
				if (ClientProxy.playerName.toLowerCase().contains("draknyte1")){
					localPlayer = true;
				}
			}
		}
		catch (final Throwable t){
	
		}
	
		if (CORE.ConfigSwitches.MACHINE_INFO || localPlayer) {
			final String name1 = gtPlusPlus.core.util.reflect.ReflectionUtils.getMethodName(2);
			modLogger.info("Machine Info: " + s + " | " + name1);
		}
	}

	// Developer Comments
	public static void WARNING(final String s) {
		if (CORE.DEBUG) {
			modLogger.warn(s);
		}
	}

	// Errors
	public static void ERROR(final String s) {
		if (CORE.DEBUG) {
			modLogger.fatal(s);
		}
	}

	// Developer Logger
	public static void SPECIFIC_WARNING(final String whatToLog, final String msg, final int line) {
		// if (!CORE.DEBUG){
		FMLLog.warning("GT++ |" + line + "| " + whatToLog + " | " + msg);
		// }
	}

	// ASM Comments
	public static void LOG_ASM(final String s) {
		FMLRelaunchLog.info("[Special ASM Logging] ", s);
	}
	
	
	
	
	
	
	
	
	
	
	/**
	 * Special Loggers
	 */
	
	/**
	 * Special Logger for Bee related content
	 */
	public static void BEES(final String s) {
		if (CORE.DEVENV || CORE.DEBUG)
		modLogger.info("[Bees] "+s);
	}
	/**
	 * Special Logger for Debugging Bee related content
	 */
	public static void DEBUG_BEES(final String s) {
		if (CORE.DEVENV || CORE.DEBUG)
		modLogger.info("[Debug][Bees] "+s);
	}
	
	
	
	/**
	 * Special Logger for Materials related content
	 */
	public static void MATERIALS(final String s) {
		if (CORE.DEVENV || CORE.DEBUG)
		modLogger.info("[Materials] "+s);
	}
	/**
	 * Special Logger for Debugging Materials related content
	 */
	public static void DEBUG_MATERIALS(final String s) {
		if (CORE.DEVENV || CORE.DEBUG)
		modLogger.info("[Debug][Materials] "+s);
	}
	
	/**
	 * Special Logger for Reflection related content
	 */
	public static void REFLECTION(final String s) {
		if (CORE.DEVENV || CORE.DEBUG)
		modLogger.info("[Reflection] "+s);
	}

	
	/**
	 * Special Logger for Darkworld related content
	 */
	public static void WORLD(final String s) {
		if (CORE.DEVENV || CORE.DEBUG)
		modLogger.info("[WorldGen] "+s);
	}

	public static void RECIPE(String string) {
		if (/*CORE.DEVENV || */CORE.DEBUG)
		modLogger.info("[Recipe] "+string);		
	}	

	public static void SPACE(final String s) {
		modLogger.info("[Space] "+s);
	}
	
	

}