package batePapo;

import java.util.ArrayList;
import java.util.List;

import edugraf.jadix.ApliqueJadix;
import edugraf.jadix.eventos.EventoDeNotificacao;
import edugraf.jadix.fachada.ComponenteDix;
import edugraf.jadix.fachada.TratadorDixAbstrato;
import edugraf.jadix.interno.rede.fachadaTelis.TratadorDeEventosDeRede;
import edugraf.jadix.tiposPrimitivos.Palavra;

public class BatePapo extends ApliqueJadix {
	private final ComponenteDix botãoEnviar = criarComponente("botãoEnviar");
	private final ComponenteDix campoDeMensagem = criarComponente("campoDeMensagem");
	private final ComponenteDix áreaDeMensagens = criarComponente("áreaDeMensagens");
	
	public void iniciar() {

		botãoEnviar.adicionarTratadorDeEventos(new TratadorDoBotãoEnviar());
		limparCampoDeMensagem();	
		
		List<Palavra> filtro = new ArrayList<Palavra>();
		filtro.add(Palavra.criarTexto("batePapoJadix"));
		filtro.add(Palavra.criarTipoGenericoTexto());

		seDito(filtro, new ReceptorDeMensagensDeRede());
	}

	private void limparCampoDeMensagem() {
		campoDeMensagem.fixarTexto("");
		campoDeMensagem.fixarFoco();
	}

	public void mostrarMensagem(String texto) {
		áreaDeMensagens.adicionarAoTexto(texto + "\n");
	}
	
	public void enviarMensagem(String mensagem) {
		List<Palavra> lista = new ArrayList<Palavra>();
		lista.add(Palavra.criarTexto("batePapoJadix")); 
		lista.add(Palavra.criarTexto(mensagem));
		dizer(lista);		
	}

	private class TratadorDoBotãoEnviar extends TratadorDixAbstrato {
		@Override
		public void seDito(EventoDeNotificacao evento) {
			if (evento.obterNomeDoEvento().equals("clicado")) {
				String textoDigitado = campoDeMensagem.obterTexto();
				enviarMensagem(textoDigitado);
				mostrarMensagem(textoDigitado);
				limparCampoDeMensagem();
			}
		}

	}
	
	class ReceptorDeMensagensDeRede implements TratadorDeEventosDeRede {

		private static final int POSICAO_DA_MENSAGEM = 1;

		public void seDito(List<Palavra> tupla) {
			mostrarMensagem(tupla.get(POSICAO_DA_MENSAGEM).comoTexto());
		}
		
	}
	
}
