package br;

import java.awt.Frame;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import java.awt.Rectangle;
import java.awt.List;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.PrintStream;


public class Tela extends Frame {
	
	//variaveis de controle
	private char statusComunicacao = 'p';//p = parado, l = lendo
	
	//variaveis de classes
	interfaceSerial is = null;  //  @jve:decl-index=0:
	Grafico g = null;

	private static final long serialVersionUID = 1L;
	
	private JButton jButtonIniciarLeitura = null;

	private List listDados = null;

	private JButton jButtonGerarGrafico = null;

	private JButton jButtonFechar = null;

	private JButton jButtonSalvarDados = null;

	private JButton jButtonCarregarDados = null;

	private JButton jButtonGraficoTempoReal = null;

	/**
	 * This is the default constructor
	 */
	public Tela() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setLayout(null);
		this.setSize(444, 272);
		this.setResizable(false);
		this.setName("tela");
		this.setTitle("Interface de anlise de dados"); 

		this.add(getJButtonIniciarPararLeitura(), null);
		this.add(getListDados(), null);
		this.add(getJButtonGerarGrafico(), null);
		this.add(getJButtonFechar(), null);
		this.add(getJButtonSalvarDados(), null);
		this.add(getJButtonCarregarDados(), null);
		this.add(getJButtonGraficoTempoReal(), null);
		this.addWindowListener(new java.awt.event.WindowAdapter() {
			public void windowClosing(java.awt.event.WindowEvent e) {
				System.out.println("windowClosing()"); // TODO Auto-generated Event stub windowClosing()
				
			}
		});
		this.addWindowListener(new java.awt.event.WindowAdapter() {
			public void windowClosing(java.awt.event.WindowEvent e) {
				System.out.println("windowClosing()"); // TODO Auto-generated Event stub windowClosing()
				JOptionPane.showMessageDialog(null, "teste")
			}
		});
	}


	private JButton getJButtonIniciarPararLeitura() {
		if (jButtonIniciarLeitura == null) {
			jButtonIniciarLeitura = new JButton();
			jButtonIniciarLeitura.setText("Iniciar Leitura");
			jButtonIniciarLeitura.setBounds(new Rectangle(75, 45, 136, 31));
			jButtonIniciarLeitura.setVisible(false);
			jButtonIniciarLeitura.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println(jButtonIniciarLeitura.getText()); // TODO Auto-generated Event stub actionPerformed()
					if (statusComunicacao == 'p'){
						if (is == null){
							is = new interfaceSerial(listDados);
						}
						is.setGraficoTempoReal(false);
						iniciarComunicacao();
					}else{
						pararComunicacao();
					}
				}
			});
		}
		return jButtonIniciarLeitura;
	}
	
	private void iniciarComunicacao(){
		statusComunicacao = 'l';
		jButtonIniciarLeitura.setText("Parar Leitura");
		listDados.removeAll();
		is.conecta();
	}
	
	private void pararComunicacao(){
		statusComunicacao = 'p';
		jButtonIniciarLeitura.setText("Iniciar Leitura");
		is.desconecta();
	}

	/**
	 * This method initializes listDados	
	 * 	
	 * @return java.awt.List	
	 */
	private List getListDados() {
		if (listDados == null) {
			listDados = new List();
			listDados.setBounds(new Rectangle(270, 75, 136, 166));
			listDados.setEnabled(true);
			listDados.setVisible(false);
		}
		return listDados;
	}

	/**
	 * This method initializes jButtonGerarGrafico	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonGerarGrafico() {
		if (jButtonGerarGrafico == null) {
			jButtonGerarGrafico = new JButton();
			jButtonGerarGrafico.setBounds(new Rectangle(75, 90, 136, 31));
			jButtonGerarGrafico.setText("Gerar Grfico");
			jButtonGerarGrafico.setVisible(false);
			jButtonGerarGrafico.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println(jButtonGerarGrafico.getText()); // TODO Auto-generated Event stub actionPerformed()
					if (statusComunicacao == 'p' && listDados.getItemCount() > 0){
						if (g != null) g.dispose();
						g = null;
						g = new Grafico();
						float y = 0f;
						
						
						for (int i = 0; i < listDados.getItemCount()-1; i++){
							y = Float.parseFloat(listDados.getItem(i));
							g.adicionaXYseries(y);
						}
						g.atualizaGrafico(y);
					}
				}
			});
		}
		return jButtonGerarGrafico;
	}

	/**
	 * This method initializes jButtonFechar1	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonFechar() {
		if (jButtonFechar == null) {
			jButtonFechar = new JButton();
			jButtonFechar.setBounds(new Rectangle(360, 30, 76, 16));
			jButtonFechar.setText("Fechar");
			jButtonFechar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println(jButtonFechar.getText()); // TODO Auto-generated Event stub actionPerformed()
					if (statusComunicacao == 'l') pararComunicacao();
					if (g != null){
						g.dispose();
						g = null;
					}
					dispose();
				}
			});
		}
		return jButtonFechar;
	}
	
	public void salvarDados(){
		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:","");
		if (nome != null && !nome.equals("")){
			try{
				 out = new FileOutputStream(nome);  
				 p = new PrintStream(out);
				 for (int i=0; i < listDados.getItemCount(); i++){
					 String valor = listDados.getItem(i);
					 for (int j=0; j < valor.length(); j++){
						 p.write(valor.charAt(j)); 
					 }
					 p.println();
				 }
				 p.close();  
			}catch (Exception e1){
				e1.printStackTrace();
			}
		}
	}
	
	private JButton getJButtonSalvarDados() {
		if (jButtonSalvarDados == null) {
			jButtonSalvarDados = new JButton();
			jButtonSalvarDados.setBounds(new Rectangle(75, 135, 136, 31));
			jButtonSalvarDados.setText("SalvarDados");
			jButtonSalvarDados.setVisible(false);
			jButtonSalvarDados.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println(jButtonSalvarDados.getText()); // TODO Auto-generated Event stub actionPerformed()
					salvarDados();
				}
			});
		}
		return jButtonSalvarDados;
	}

	
	private JButton getJButtonCarregarDados() {
		if (jButtonCarregarDados == null) {
			jButtonCarregarDados = new JButton();
			jButtonCarregarDados.setBounds(new Rectangle(75, 180, 136, 31));
			jButtonCarregarDados.setText("Carregar Dados");
			jButtonCarregarDados.setVisible(false);
			jButtonCarregarDados.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println(jButtonCarregarDados.getText()); // TODO Auto-generated Event stub actionPerformed()
					carregarDados();
				}
			});
		}
		return jButtonCarregarDados;
	}

	public void carregarDados(){
		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:","");
		if (nome != null && !nome.equals("")){
			try{
				 fr = new FileReader(nome);
				 br = new BufferedReader(fr);
				 listDados.removeAll();
				 while ((valor = br.readLine()) != null) {  
					 listDados.add(valor);
					 System.out.println(valor);
				 }  
				 br.close();
			}catch (Exception e1) {  
	            JOptionPane.showMessageDialog(null, "Arquivo no encontrado!"); 
	        }  
		}
	}

	/**
	 * This method initializes jButtonTempoReal	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonGraficoTempoReal() {
		if (jButtonGraficoTempoReal == null) {
			jButtonGraficoTempoReal = new JButton();
			jButtonGraficoTempoReal.setBounds(new Rectangle(133, 127, 166, 31));
			jButtonGraficoTempoReal.setText("Grfico em Tempo Real");
			jButtonGraficoTempoReal.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.out.println(jButtonGraficoTempoReal.getText()); // TODO Auto-generated Event stub actionPerformed()
					if (statusComunicacao == 'p'){
						if (g != null) g.dispose();
						g = null;
						g = new Grafico();
						if (is == null) is = new interfaceSerial(listDados);
						is.setG(g);
						is.setGraficoTempoReal(true);
						iniciarComunicacao();
					}
				}
			});
		}
		return jButtonGraficoTempoReal;
	}
}  //  @jve:decl-index=0:visual-constraint="10,10"
