package org.openlca.app.logging;

import org.apache.log4j.Level;
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.eclipse.jface.preference.IPreferenceStore;
import org.openlca.app.rcp.RcpActivator;

/**
 * The preferences of the application logging.
 */
public class LoggerPreference extends AbstractPreferenceInitializer {

	public static final String LOG_LEVEL = "olca-log-level";
	public static final String LOG_CONSOLE = "olca-log-console";

	public static final String LEVEL_ALL = "olca-log-level-all";
	public static final String LEVEL_INFO = "olca-log-level-info";
	public static final String LEVEL_WARN = "olca-log-level-warn";
	public static final String LEVEL_ERROR = "olca-log-level-error";

	@Override
	public void initializeDefaultPreferences() {
		IPreferenceStore store = getStore();
		store.setDefault(LOG_CONSOLE, false);
		store.setDefault(LOG_LEVEL, LEVEL_INFO);
	}

	static Level getLogLevel() {
		IPreferenceStore store = getStore();
		String levelId = store.getString(LOG_LEVEL);
		if (levelId == null)
			return Level.INFO;
		return getLevelForId(levelId);
	}

	private static Level getLevelForId(String levelId) {
		switch (levelId) {
		case LEVEL_ALL:
			return Level.ALL;
		case LEVEL_INFO:
			return Level.INFO;
		case LEVEL_WARN:
			return Level.WARN;
		case LEVEL_ERROR:
			return Level.ERROR;
		}
		return Level.INFO;
	}

	public static boolean getShowConsole() {
		IPreferenceStore store = getStore();
		return store.getBoolean(LOG_CONSOLE);
	}

	static IPreferenceStore getStore() {
		return RcpActivator.getDefault().getPreferenceStore();
	}

}