package com.softgraf.chat.servidor;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

import javax.swing.JOptionPane;

import com.softgraf.chat.Mensagem;


public class GerenciadorCliente extends Thread {

	private Socket cliente;
	private ObjectInputStream entrada;
	private ObjectOutputStream saida;
	private String idServidor;
	private Mensagem msgEntrada, msgSaida;
	private String idUsuario, msg;
	private int status;
	private boolean conectado;
	
	// construtor
	public GerenciadorCliente(Socket cliente, ObjectInputStream entrada, ObjectOutputStream saida, String idServidor) {
		this.cliente = cliente;
		this.entrada = entrada;
		this.saida = saida;
		this.idServidor = idServidor;
		this.conectado = true;
	}
	
	
	@Override
	public void run() {

		while (conectado) {
			
			try {
				
				// recebe objeto Mensagem enviado pelo cliente
				msgEntrada = (Mensagem) entrada.readObject();
				idUsuario = msgEntrada.getIDusuario();
				status = msgEntrada.getStatus();
				msg = msgEntrada.getMensagem();
				
				switch (status) {
				
					case Mensagem.DESCONECTAR:
						conectado = false;
						ChatServidor.anexaMensagem("\n\n" + idUsuario + " desconectou. Mensagem: " + msg);
						ChatServidor.removeUsuarioOnline(idUsuario);
						ChatServidor.mostraUsuariosOnline();
						entrada.close();
						saida.close();
						cliente.close();
						break;
					
					case Mensagem.LISTAR_USUARIOS:
						ChatServidor.anexaMensagem("\n\n" + idUsuario + " solicitou usuários online. Enviando... ");
						msgSaida = new Mensagem(idServidor, Mensagem.LISTAR_USUARIOS, "usuarios online");
						msgSaida.setUsuariosOnline(ChatServidor.getUsuariosOnline());
						saida.writeObject(msgSaida);
						saida.flush();
						ChatServidor.anexaMensagem("OK.");
						break;
						
				}
				

			} catch (ClassNotFoundException e) {
				JOptionPane.showMessageDialog(null, e.getMessage(), "GerenciadorCliente Erro Fatal 1", JOptionPane.ERROR_MESSAGE);
				conectado = false;

			} catch (IOException e) {
				JOptionPane.showMessageDialog(null, e.getMessage(), "GerenciadorCliente Erro Fatal 2", JOptionPane.ERROR_MESSAGE);
				conectado = false;

			}

		} // while
		
	}
	
}