package client;

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

import chat.Chatroom;
import chat.Chatter;
import chat.TextChatter;
import net.Message;
import net.TCPClient;
import net.Message.Header;

public class ClientChatroom extends TCPClient implements Chatroom, Runnable {
	private Vector<Message> messages = new Vector<Message>();
	private Vector<String> pseudos = new Vector<String>();
	private Chatter chatter;
	
	@Override
	public String getTopic() {
		Message message;
		String topic = "";
		try {
			message = getMessage();
			topic = message.getData().get(0);
		} catch (Exception e) {
			System.out.println(e);
			e.printStackTrace();
		}
		return topic;
	}

	@Override
	public void join(Chatter c) {
		try {
			sendMessage(new Message(Header.JOIN, c.getPseudo()));
			chatter = c;
		} catch (IOException e) {
			System.out.println(e);
			e.printStackTrace();
		}
	}

	@Override
	public void post(String msg, Chatter c) {
		//System.out.println("nous envoyons un message");
		Message message = new Message(Header.POST);
		message.addPart(c.getPseudo());
		message.addPart(msg);
		try {
			//System.out.println("message en cours d'envoie");
			sendMessage(message);
		} catch (IOException e) {
			System.out.println(e);
			e.printStackTrace();
		}
	}

	@Override
	public void quit(Chatter c) {
		try {
			sendMessage(new Message(Header.QUIT, c.getPseudo()));
			this.disconnect();
		} catch (IOException e) {
			System.out.println(e);
			e.printStackTrace();
		}
	}

	@Override
	public void run() {
		try {
			Message message;
			while ((message = getMessage()) != null) {
				switch (message.head) {
					case JOINED :
						pseudos.add(message.getData().get(0));
						if (chatter != null) {
							chatter.joinNotification(new TextChatter(message.getData().get(0)));
						}
						System.out.println(pseudos);
						break;
					case GET : 
						messages.add(message);
						if (chatter != null) {
							chatter.receiveAMessage(message.getData().get(1), new TextChatter(message.getData().get(0)));
						}
						System.out.println("get message" + messages);
						break;
					case LEFT : 
						pseudos.remove(message.getData().get(0));
						if (chatter != null) {
							chatter.quitNotification(new TextChatter(message.getData().get(0)));
						}
						System.out.println(pseudos);
						break;
				}
			}
			System.out.println("End of while");
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

}
