package org.stevewinfield.sunrise.communication;

import java.util.HashMap;
import java.util.Map;

import org.stevewinfield.sunrise.Logging;
import org.stevewinfield.sunrise.communication.events.handshake.AuthenticationMessageEvent;
import org.stevewinfield.sunrise.communication.events.navigator.ListRoomsMessageEvent;
import org.stevewinfield.sunrise.game.sessions.Session;

public class MessageHandler {
	private Map<Integer, IMessageEvent> messages;
	
	public MessageHandler() {
		this.messages = new HashMap<Integer, IMessageEvent>();
		this.putHandshakeMessages();
		this.putNavigatorMessages();
		Logging.writeLog("MessageHandler loaded " + this.messages.size() + " Events.");
	}
	
	public void handleMessage(Session session, MessageEvent event) {
		if (this.messages.containsKey(event.id)) {
			Logging.writeLog("Message received [" + event.id + "] " + event.msg + " (HANDLING)");
			this.messages.get(event.id).parse(session, event);
		} else  {
			Logging.writeLog("Message received [" + event.id + "] " + event.msg);
		}
	}
	
	private void putNavigatorMessages() {
		this.messages.put(5, new ListRoomsMessageEvent());
	}
	
	private void putHandshakeMessages() {
		this.messages.put(2, new AuthenticationMessageEvent());
	}
}
