/*
 * Created on 11/12/2006
 */

/**
 * @author Carlos Andres Sierra - Cod. 257188
 *         Jefferson Velasquez - Cod. 257196
 *         Juan Albeiro Caballero - Cod. 257200  			
 */

import javax.swing.*;
import javax.swing.JApplet;
import java.awt.Color;
import java.awt.event.*;

public class Applet_Test_Chips extends JApplet implements MouseListener{

	private static final long serialVersionUID = 3834587720981690678L;

	// Se declaran los controles que componen el Applet
	private JPanel Contenedor = null;
	private JPanel pnlGrafica = null;
	
	private JLabel lblEntrada = null;
	private JLabel lblChips = null;
	private JLabel lblEjecuciones = null;
	private JLabel lblMalos = null;
	private JLabel lblDaño = null;
	private JLabel lblHistograma = null;
	private JLabel lblError = null;
	
	private JTextField txtChips = null;
	private JTextField txtEjecuciones = null;
	private JTextField txtMalos = null;
	private JTextField txtDaño = null;
	
	private JTextArea txtProbability = null;
	private JScrollPane scpProbability = null;
	
	private JButton btnCalcular = null;
	
	/**
	 * Este es el constructor de la clase
	 */
	public Applet_Test_Chips() 
	{
		super();
		init();
	}

	// Se inicializa el tamaño del Applet y el JPanel que va a contener a los controles
	public void init() 
	{
		this.setSize(500,500);
		this.setContentPane(initContenedor());
	}
	
	private JPanel initContenedor()
	{
		if(Contenedor == null)
		{
			Contenedor = new JPanel();
			Contenedor.setLayout(null);
			Contenedor.setBackground(Color.orange);
			Contenedor.setSize(500,500);
			
			pnlGrafica = new JPanel();
			pnlGrafica.setLayout(null);
			pnlGrafica.setBackground(Color.white);
			pnlGrafica.setBounds(40,250,278,200);
			Contenedor.add(pnlGrafica);
			
			
			// Iniciañización de los controles que componen la aplicación
			lblEntrada = new JLabel();
			lblEntrada.setBounds(20,20,470,20);
			lblEntrada.setText("Todos los campos deben contener información para poder ejecutar la aplicación.");
			Contenedor.add(lblEntrada);
			
			
			lblChips = new JLabel();
			lblChips.setBounds(50,50,350,20);
			lblChips.setText("Número de Chips a Testear:                            (Mínimo 4)");
			Contenedor.add(lblChips);
			
			txtChips = new JTextField();
			txtChips.setBounds(215,50,50,20);
			txtChips.setText("101");
			Contenedor.add(txtChips);
			
			
			lblEjecuciones = new JLabel();
			lblEjecuciones.setBounds(50,80,350,20);
			lblEjecuciones.setText("Número de Ejecuciones:                                   (Mínimo 100)");
			Contenedor.add(lblEjecuciones);
			
			txtEjecuciones = new JTextField();
			txtEjecuciones.setBounds(215,80,50,20);
			txtEjecuciones.setText("500");
			Contenedor.add(txtEjecuciones);
			
			
			lblMalos = new JLabel();
			lblMalos.setBounds(50,110,340,20);
			lblMalos.setText("Proporción de Chips Malos:                     %     (Entre 1% y 49%)");
			Contenedor.add(lblMalos);
			
			txtMalos = new JTextField();
			txtMalos.setBounds(215,110,50,20);
			txtMalos.setText("49");
			Contenedor.add(txtMalos);
			
			
			lblDaño = new JLabel();
			lblDaño.setBounds(50,140,350,20);
			lblDaño.setText("Probabilidad de Daño:                                %     (Entre 2% y 99%)");
			Contenedor.add(lblDaño);
			
			txtDaño = new JTextField();
			txtDaño.setBounds(215,140,50,20);
			txtDaño.setText("50");
			Contenedor.add(txtDaño);
			
			
			lblError = new JLabel();
			lblError.setBounds(20,170,450,20);
			lblError.setForeground(Color.red);
			Contenedor.add(lblError);
			
			lblHistograma = new JLabel();
			lblHistograma.setBounds(40,225,100,20);
			lblHistograma.setForeground(Color.blue);
			lblHistograma.setText("HISTOGRAMA");
			Contenedor.add(lblHistograma);
			
			Contenedor.add(initJButtonAceptar(), null);
			Contenedor.add(initJScrollPane(), null);
		}
		return Contenedor;
	}

	/*
	 * Inicialización del botón "Calcular" de la aplicación 
	 */
	private JButton initJButtonAceptar()
	{
		if(btnCalcular == null)
		{
			btnCalcular = new JButton();
			btnCalcular.setBounds(275,200,90,20);
			btnCalcular.setText("Calcular");
			btnCalcular.addMouseListener(this);
		}
		return btnCalcular;
	}

	/*
	 * Inicialización del JScrollPane y JTextArea que muestran la distribución de
	 * probabilidad para el experimento realizado
	 */
	private JScrollPane initJScrollPane()
	{
		if(scpProbability == null)
		{
			scpProbability = new JScrollPane();
			scpProbability.setBounds(320,250,125,200);
			scpProbability.setViewportView(initTextArea());
		}
		return scpProbability;
	}
	
	private JTextArea initTextArea()
	{
		if(txtProbability == null)
		{
			txtProbability = new JTextArea();
			txtProbability.setEditable( false );
		}
		return txtProbability;
	}
	
	
	/*
	 * Evento del mouse que se utiliza en la aplicación
	 */
	public void mouseClicked(MouseEvent arg0) 
	{
		try
		{
			lblError.setText("");
		
			if((txtChips.getText().toString().length() != 0) && (Integer.parseInt(txtChips.getText().toString()) > 3))
				if((txtEjecuciones.getText().toString().length() != 0) && (Integer.parseInt(txtEjecuciones.getText().toString()) > 99))
					if((txtMalos.getText().toString().length() != 0) && (Double.parseDouble(txtMalos.getText().toString()) < 50))
						if((txtDaño.getText().toString().length() != 0) && (Double.parseDouble(txtDaño.getText().toString()) >= 2) && (Double.parseDouble(txtDaño.getText().toString()) <= 99))
						{
							Test_Chips tc = new Test_Chips(Integer.parseInt(txtChips.getText().toString()), Integer.parseInt(txtEjecuciones.getText().toString()), Double.parseDouble(txtMalos.getText().toString()), Double.parseDouble(txtDaño.getText().toString()));
							txtProbability.setText(tc.Salida);
							double MProbability[][] = tc.Probability;
						}
						else
							lblError.setText("ERROR. El campo de la probabilidad de daño tiene un valor erróneo.");
					else
						lblError.setText("ERROR. El campo de la proporción de malos tiene un valor erróneo.");
				else
					lblError.setText("ERROR. El campo de las Ejecuciones tiene un valor erróneo.");
			else
				lblError.setText("ERROR. El campo de los Chips tiene un valor erróneo.");
		}
		catch(Exception ex)
		{
			lblError.setText("ERROR. Hay un dato erróneo. Ingrese de nuevo todos los datos.");
		}
	}

	/*
	 * Eventos del mouse que no se utilizan
	 */	
	public void mousePressed(MouseEvent arg0) {}
	public void mouseReleased(MouseEvent arg0) {}
	public void mouseEntered(MouseEvent arg0) {}
	public void mouseExited(MouseEvent arg0) {}
}
