package com.xcompwiz.lookingglass.imc;

import java.util.HashMap;
import java.util.Map;

import com.google.common.collect.ImmutableList;
import com.xcompwiz.lookingglass.log.LoggerUtils;

import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;

public class IMCHandler {
	public interface IMCProcessor {
		public void process(IMCMessage message);
	}

	private static Map<String, IMCProcessor>	processors	= new HashMap<String, IMCProcessor>();

	static {
		registerProcessor("api", new IMCAPIRegister());
	}

	private static void registerProcessor(String key, IMCProcessor processor) {
		processors.put(key.toLowerCase(), processor);
	}

	public static void process(ImmutableList<IMCMessage> messages) {
		for (IMCMessage message : messages) {
			String key = message.key.toLowerCase();
			IMCProcessor process = processors.get(key);
			if (process == null) {
				LoggerUtils.error("IMC message '%s' from [%s] unrecognized", key, message.getSender());
			}
			try {
				process.process(message);
			} catch (Exception e) {
				LoggerUtils.error("Failed to process IMC message '%s' from [%s]", key, message.getSender());
				e.printStackTrace();
			}
		}
	}
}