package server;

import java.io.*;
import protocol.Header;
import protocol.Message;
import protocol.TCPServeurMessage;

import chat.*;

public class ServerChatRoom extends TCPServeurMessage implements Chatter,Cloneable, ChatRoom {

	private ChatRoom concretCR;
	private boolean echo;
	private String pseudo;
	
	public ServerChatRoom (String topic) {
		concretCR = new TextChatRoom (topic);
		echo = true;
	}
	
	@Override
	public void gereClient() {
		try {
			System.out.println("Handling new client for Chatroom service");
			
			while (true) {
				Message req;
				req = getMessage();
				System.out.println("Chatroom of topic :"+concretCR.getTopic()+"receive message"+req);
				switch (req.head.type) {
				case POST_MSG : 
					poster(req.data.get(0),new TextChatter(req.data.get(1)));
					break;
				case QUIT_TOPIC : 
					quitter(this);
					break;
				case JOIN_TOPIC :
					pseudo = req.data.get(0);
					rejoindre(this);
					break;
				}			
			}
		} catch (IOException e) {
			System.err.println("Client connection lost !! Error :"+e);
			System.err.println("Exiting properly ");			
		}
		
		concretCR.quitter(this);		
	}
	

	public void poster(String message, Chatter auteur) {
		concretCR.poster(message,auteur);
	}

	public void recevoirMessage(String message, Chatter auteur) {
		if (echo) {
			System.out.println( auteur + " > " + message);
		}
		try {
			sendMessage(new Message(Header.MsgType.RECV_POST,message,auteur.getPseudo()));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public String getPseudo() {
		return pseudo;
	}

	public void setEcho (boolean on) {
		echo = on;
	}

	public void rejoindre(Chatter bob) {
		concretCR.rejoindre(bob);
	}

	public void quitter(Chatter bob) {
		concretCR.quitter(bob);
	}

	public String getTopic() {
		return concretCR.getTopic();
	}

}
