package tools;

import java.util.Date;
import org.apache.log4j.Logger;

public class Debug {
	public static enum LogType{NO, ERROR, FAULT, EXCEPTION};
	public static final int ERROR=0, Fault=1, Exception=2;
	
	public static boolean LogSwitch = false;
	public static boolean LoggerSwitch = true;
	static Logger logger = Logger.getLogger(Debug.class);

	public static void init(){
		if(logger == null){
			logger = Logger.getLogger(Debug.class);
		}
	}
	
	public static void log(String messsage) {
		log(LogType.NO, messsage);
	}
	
	public static void log(LogType logType, String messsage) {
		init();
		if (LogSwitch) {
			System.out.print(getTime());
			if (logType != LogType.NO)
				System.out.print(getLogTypeString(logType));
			System.out.println(messsage);
		}
		
		if (LoggerSwitch)
			if (logType != LogType.NO)
				logger.info(getLogTypeString(logType) + messsage);
			else
				logger.info(messsage);
	}
	
	
	public static void log(String head, String messsage) {
		log(LogType.NO, head, messsage);
	}
	
	public static void log(LogType logType, String head, String messsage) {
		init();
		if (LogSwitch) {
			System.out.print(getTime());
			if (logType != LogType.NO)
				System.out.print(getLogTypeString(logType));
			
			System.out.println(head + " : " + messsage);
		}

		if (LoggerSwitch)
			if (logType != LogType.NO)
				logger.info(getLogTypeString(logType) + head + " : " + messsage);
			else
				logger.info(head + " : " + messsage);
	}

	public static void log(String[] heads, String messsage) {
		log(LogType.NO, heads, messsage);
	}

	public static void log(LogType logType, String[] heads, String messsage) {
		init();
		if (LogSwitch) {
			System.out.print(getTime());
			
			if (logType != LogType.NO)
				System.out.print(getLogTypeString(logType));
			
			for (String s : heads)
				System.out.print(s + " : ");
			
			System.out.println(messsage);
		}
		
		if (LoggerSwitch) {
			logger.info(getTime());
			
			String str = getLogTypeString(logType);
			
			for (String s : heads)
				str += s + " : ";
	
			str += messsage;
			
			logger.info(str);
		}
		
	}
	
	public static String getTime(){
		Date date = new Date();
		return "[" + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds() + "]";
	}
	
	private static String getLogTypeString(LogType logType){
		return "[" + logType.toString() + "]";
	}
}