package br;

import java.awt.Frame;

import javax.swing.JOptionPane;

import java.awt.Rectangle;
import javax.swing.JLabel;
import java.awt.List;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.PrintStream;
import javax.swing.JButton;

import java.awt.ComponentOrientation;
import java.awt.Point;
import java.awt.Dimension;

public class TelaPrincipal extends Frame {

	private static final long serialVersionUID = 1L;
	private JLabel jLabelDadosRecebidos = null;
	private List listDadosRecebidos = null;
	private interfaceSerial Comunicacao = null;  //  @jve:decl-index=0:
	private JButton jButtonIniciarLeitura = null;
	private JButton jButtonPararLeitura = null;
	private JButton jButtonLimparDadosRecebidos = null;
	private JButton jButtonGerarGrafico = null;
	private JButton jButtonSalvar = null;
	private JButton jButtonAbrir = null;
	private JLabel jLabelQTDDadosRecebidos = null;
	private JLabel jLabelTempo = null;
	
	private JLabel jLabelTextTempo = null;
	private JLabel jLabelMediaDadosPorTempo = null;
	private JLabel jLabelDadoPorMsCalculo = null;
	
	private char status = 'p';
	
	/**
	 * This is the default constructor
	 */
	public TelaPrincipal() {
		super();
		initialize();
	}

	public void adicionaDados(String dado){
		System.out.println(dado);
		listDadosRecebidos.add(dado);
	}
	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		jLabelDadoPorMsCalculo = new JLabel();
		jLabelDadoPorMsCalculo.setText("0");
		jLabelDadoPorMsCalculo.setSize(new Dimension(60, 18));
		jLabelDadoPorMsCalculo.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		jLabelDadoPorMsCalculo.setLocation(new Point(143, 88));
		jLabelMediaDadosPorTempo = new JLabel();
		jLabelMediaDadosPorTempo.setText("Mdia (dados/s):");
		jLabelMediaDadosPorTempo.setSize(new Dimension(106, 18));
		jLabelMediaDadosPorTempo.setLocation(new Point(31, 87));
		jLabelTextTempo = new JLabel();
		jLabelTextTempo.setText("Tempo (ms):");
		jLabelTextTempo.setSize(new Dimension(106, 18));
		jLabelTextTempo.setLocation(new Point(31, 62));
		jLabelTempo = new JLabel();
		jLabelTempo.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		jLabelTempo.setLocation(new Point(141, 64));
		jLabelTempo.setSize(new Dimension(60, 18));
		jLabelTempo.setText("0");
		jLabelQTDDadosRecebidos = new JLabel();
		jLabelQTDDadosRecebidos.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		jLabelQTDDadosRecebidos.setLocation(new Point(141, 41));
		jLabelQTDDadosRecebidos.setSize(new Dimension(60, 18));
		jLabelQTDDadosRecebidos.setText("0");
		jLabelDadosRecebidos = new JLabel();
		jLabelDadosRecebidos.setBounds(new Rectangle(31, 41, 107, 18));
		jLabelDadosRecebidos.setText("Dados Recebidos:");
		this.setLayout(null);
		this.setSize(640, 400);
		this.setName("Monografia III");
		this.setTitle("Monografia III");
		this.setTitle("Frame");
		this.setResizable(false);
		this.add(jLabelDadosRecebidos, null);
		this.add(getList(), null);
		this.add(getJButtonIniciarLeitura(), null);
		this.add(getJButtonPararLeitura(), null);
		this.add(getJButtonLimparDadosRecebidos(), null);
		this.add(getJButtonGerarGrafico(), null);
		this.add(getJButtonSalvar(), null);
		this.add(getJButtonAbrir(), null);
		this.add(jLabelQTDDadosRecebidos, null);
		this.add(jLabelTempo, null);
		this.add(jLabelTextTempo, null);
		this.add(jLabelMediaDadosPorTempo, null);
		this.add(jLabelDadoPorMsCalculo, null);
		
		//tCronometro = new Thread(new cronometro(jLabelTempo));
		//tCronometro.start();
		
	}

	/**
	 * This method initializes list	
	 * 	
	 * @return java.awt.List	
	 */
	private List getList() {
		if (listDadosRecebidos == null) {
			listDadosRecebidos = new List();
			listDadosRecebidos.setBounds(new Rectangle(36, 110, 132, 166));
		}
		return listDadosRecebidos;
	}

	/**
	 * This method initializes jButtonIniciarLeitura	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonIniciarLeitura() {
		if (jButtonIniciarLeitura == null) {
			jButtonIniciarLeitura = new JButton();
			jButtonIniciarLeitura.setBounds(new Rectangle(228, 40, 132, 34));
			jButtonIniciarLeitura.setText(" Iniciar Leitura");
			jButtonIniciarLeitura.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if (status != 'l'){//l = lendo
						if (Comunicacao == null){
							Comunicacao = new interfaceSerial(listDadosRecebidos);
						}
						Comunicacao.conecta();
						Comunicacao.enviaDado('s');
						Comunicacao.setQtdDadosRecebidos(0);
						System.out.println("IniciarLeitura");
						status = 'l';
					}
				}
			});
		}
		return jButtonIniciarLeitura;
	}

	/**
	 * This method initializes jButtonPararLeitura	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonPararLeitura() {
		if (jButtonPararLeitura == null) {
			jButtonPararLeitura = new JButton();
			jButtonPararLeitura.setBounds(new Rectangle(227, 77, 132, 36));
			jButtonPararLeitura.setText("Parar Leitura");
			jButtonPararLeitura.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if (status == 'l'{
						if (Comunicacao != null){
							Float qtd = 0f, ms = 0f;
							Comunicacao.desconecta();
							System.out.println("qtd:" + Comunicacao.getQtdDadosRecebidos());
							jLabelQTDDadosRecebidos.setText(String.valueOf(listDadosRecebidos.getItemCount()/2));
							System.out.println("PararLeitura"); // TODO Auto-generated Event stub actionPerformed()
							tempoLendo = (System.currentTimeMillis()) - tempoLendo + Long.valueOf(jLabelTempo.getText());
							jLabelTempo.setText(String.valueOf(tempoLendo));
							qtd = Float.parseFloat(jLabelQTDDadosRecebidos.getText());
							ms = Float.parseFloat(jLabelTempo.getText());
							if (ms != 0 && qtd != 0) jLabelDadoPorMsCalculo.setText(String.valueOf((qtd/ms)*1000).substring(0,5));
						}
					}
				}
			});
		}
		return jButtonPararLeitura;
	}

	/**
	 * This method initializes jButtonLimparDadosRecebidos	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonLimparDadosRecebidos() {
		if (jButtonLimparDadosRecebidos == null) {
			jButtonLimparDadosRecebidos = new JButton();
			jButtonLimparDadosRecebidos.setBounds(new Rectangle(379, 78, 133, 35));
			jButtonLimparDadosRecebidos.setText("Limpar");
			jButtonLimparDadosRecebidos
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							System.out.println("limpar"); // TODO Auto-generated Event stub actionPerformed()
							listDadosRecebidos.removeAll();
							jLabelQTDDadosRecebidos.setText("0");
							jLabelTempo.setText("0");
							jLabelDadoPorMsCalculo.setText("0");
							Comunicacao = null;
						}
					});
		}
		return jButtonLimparDadosRecebidos;
	}

	/**
	 * This method initializes jButtonGerarGrafico	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonGerarGrafico() {
		if (jButtonGerarGrafico == null) {
			jButtonGerarGrafico = new JButton();
			jButtonGerarGrafico.setBounds(new Rectangle(378, 38, 133, 35));
			jButtonGerarGrafico.setText("Gerar Grafico");
			jButtonGerarGrafico.setVisible(true);
			jButtonGerarGrafico.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("GerarGrafico"); // TODO Auto-generated Event stub actionPerformed()
					if (Comunicacao != null){
						int totalItem = listDadosRecebidos.getItemCount();
						for (int i = 0; i < totalItem-1; i++){
							Comunicacao.atualizaGrafico(Float.parseFloat(listDadosRecebidos.getItem(i)));
						}
					}
				}
			});
		}
		return jButtonGerarGrafico;
	}

	/**
	 * This method initializes jButtonSalvar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonSalvar() {
		if (jButtonSalvar == null) {
			jButtonSalvar = new JButton();
			jButtonSalvar.setBounds(new Rectangle(45, 283, 109, 33));
			jButtonSalvar.setText("Salvar");
			jButtonSalvar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("Salvar"); // TODO Auto-generated Event stub actionPerformed()
					FileOutputStream out;
					PrintStream p;
					String nome = null;
					
					nome = JOptionPane.showInputDialog ("Digite o nome do arquivo:","d:\\");
					if (nome != null && !nome.equals("")){
						try{
							 out = new FileOutputStream(nome);  
							 p = new PrintStream(out);
							 for (int i=0; i < listDadosRecebidos.getItemCount(); i++){
								 String valor = listDadosRecebidos.getItem(i);
								 for (int j=0; j < valor.length(); j++){
									 p.write(valor.charAt(j)); 
								 }
								 p.println();
							 }
							 p.close();  
						}catch (Exception e1){
							e1.printStackTrace();
						}
					}
				}
			});
		}
		return jButtonSalvar;
	}

	/**
	 * This method initializes jButtonAbrir	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonAbrir() {
		if (jButtonAbrir == null) {
			jButtonAbrir = new JButton();
			jButtonAbrir.setBounds(new Rectangle(33, 323, 136, 32));
			jButtonAbrir.setText("Abrir arquivo");
			jButtonAbrir.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println("abrir"); // TODO Auto-generated Event stub actionPerformed()
		            FileReader fr = null;  
		            BufferedReader br = null;  
					String nome = null;
					String valor = null;
					
					nome = JOptionPane.showInputDialog ("Digite o nome do arquivo:","d:\\");
					if (nome != null && !nome.equals("")){
						try{
							 fr = new FileReader(nome);
							 br = new BufferedReader(fr);
							 listDadosRecebidos.removeAll();
							 while ((valor = br.readLine()) != null) {  
								 listDadosRecebidos.add(valor);
								 System.out.println(valor);
							 }  
							 br.close();
							 jLabelQTDDadosRecebidos.setText(String.valueOf(listDadosRecebidos.getItemCount()));
						}catch (Exception e1) {  
				            JOptionPane.showMessageDialog(null, "Arquivo no encontrado!"); 
				        }  
					}
				}
			});
		}
		return jButtonAbrir;
	}
}  //  @jve:decl-index=0:visual-constraint="-115,-82"
