package server;

import java.io.IOException;
import java.net.Socket;
import java.util.Vector;

import chat.Chatroom;
import chat.Chatter;
import chat.TextChatroom;

import net.Message;
import net.TCPServer;
import net.Message.Header;

public class ServerChatroom extends TCPServer implements Chatter {
	private String pseudo;
	private TextChatroom textChatroom;
	
	public ServerChatroom(Chatroom chatroom) {
		this.textChatroom = (TextChatroom) chatroom;
	}

	@Override
	public void manageClient(Socket comm) {
		try {
				Message inputMessage;
				while ((inputMessage = getMessage()) != null) {
					//Message inputMessage = getMessage();
					switch (inputMessage.head) {
						case JOIN :
							//System.out.println("un message JOIN re�u");
							pseudo = inputMessage.getData().get(0);
							textChatroom.join(this);
							//joinNotification(this);
							break;
						case POST :
							//System.out.println("un message POST re�u");
							String message = inputMessage.getData().get(1);
							textChatroom.post(message, this);
							break;
						case QUIT :
							//System.out.println("un message QUIT re�u");
							textChatroom.quit(this);	
							break;
						default : 
							break;
				}
			}
		} catch (Exception e) {
			System.out.println(e);
			e.printStackTrace();
		}
	}

	@Override
	public String getPseudo() {
		return pseudo;
	}

	@Override
	public void receiveAMessage(String msg, Chatter c) {
		Vector<String> data = new Vector<String>(2);
		data.add(c.getPseudo());
		data.add(msg);
		try {
			sendMessage(new Message(Header.GET, data));
		} catch (IOException e) {
			System.out.println(e);
			e.printStackTrace();
		}
	}
	
	@Override
	public void joinNotification(Chatter c) {
		Vector<String> data = new Vector<String>(1);
		data.add(c.getPseudo());
		try {
			sendMessage(new Message(Header.JOINED, data));
		} catch (IOException e) {
			System.out.println(e);
			e.printStackTrace();
		}
	}	
	
	@Override
	public void quitNotification(Chatter c) {
		Vector<String> data = new Vector<String>(1);
		data.add(c.getPseudo());
		try {
			sendMessage(new Message(Header.LEFT, data));
		} catch (IOException e) {
			System.out.println(e);
			e.printStackTrace();
		}
	}
}
