package server;

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

import authentification.Authentification;

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 String password;
	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 :
							pseudo = inputMessage.getData().get(0);
							password = inputMessage.getData().get(1);
							Authentification am = new Authentification();
							try
							{
								am.authentify(pseudo, password);
								textChatroom.join(this);
							}
							catch(Exception e)
							{
								System.out.println(e);
							}
							//joinNotification(this);
							break;
						case POST :
							String message = inputMessage.getData().get(1);
							textChatroom.post(message, this);
							break;
						case QUIT :
							textChatroom.quit(this);	
							break;
						default : 
							break;
				}
			}
		} catch (Exception e) {
			System.out.println(e);
			e.printStackTrace();
		}
	}

	@Override
	public String getPseudo() {
		return pseudo;
	}
	
	@Override
	public String getPassword()
	{
		return password;
	}
	
	@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();
		}
	}
}
