/**
* @author Felipe Diaz, Alejandro Merello
* @version 1.00 2008-04-26
*/

import javax.swing.*;
import javax.swing.plaf.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

/**
* Objeto para la creacion y manejo de la tombola
*/

public class TombolaFrame  extends JFrame  implements ActionListener{
	JTextPane jt1,jt2;   
	JScrollPane scrollPane1,scrollPane2;
	SimpleAttributeSet attrs;
	Estudiante [] lista,lista_random;   
	File file;   
	JFileChooser selector = new JFileChooser();   
	Icon icono = new ImageIcon("images/logoelo2.gif");   
	Nombres curso;
	int p;
	boolean rodado=false;
	JSplitPane sp;

	/**Metodo para crear la ventana con sus frames y botones.
	*/
	public TombolaFrame(){
		JMenuBar menuBar;
		JMenu menu1, menu2, menu3;
		JMenuItem menu1Item, menu2Item ,menu3Item;
      
		addWindowListener(
			new WindowAdapter(){
				public void windowClosing(WindowEvent e){System.exit(0);}
			}
		);

		Container contentPane = getContentPane(); 

		jt1 = new JTextPane(); jt2 = new JTextPane();

		jt1.setEditable(false); jt2.setEditable(false);

		scrollPane1 = new JScrollPane(jt1); scrollPane2 = new JScrollPane(jt2);

		scrollPane1.setMinimumSize(new Dimension(300, 150));
		scrollPane2.setMinimumSize(new Dimension(370, 150));

		scrollPane1.getHorizontalScrollBar();
		scrollPane1.getVerticalScrollBar();

		sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scrollPane1, scrollPane2);

		contentPane.add(sp,BorderLayout.CENTER);

		try{attrs = new SimpleAttributeSet();} 
		catch (Exception e2){e2.printStackTrace();}

		//Crear la barra de menu.
		menuBar = new JMenuBar();
		setJMenuBar(menuBar);

		//Construye el Primer Menu: Archivo.
		menu1 = new JMenu("Archivo");
		menuBar.add(menu1);

		//un grupo de JMenuItems para Archivo: Abrir y Terminar
		menu1Item = new JMenuItem("Abrir");
		menu1Item.addActionListener(this);
		menu1.add(menu1Item);
		menu1Item = new JMenuItem("Terminar");
		menu1Item.addActionListener(this);
		menu1.add(menu1Item);

		//Construye el Segundo Menu: Accion.
		menu2 = new JMenu("Accion");
		menuBar.add(menu2);

		//un grupo de JMenuItems para Accion: 
		menu2Item = new JMenuItem("Rodar");
		menu2Item.addActionListener(this);
		menu2.add(menu2Item);
		menu2Item = new JMenuItem("Buscar");
		menu2Item.addActionListener(this);
		menu2.add(menu2Item);
      
		//Construye el Tercer Menu: About.
		menu3 = new JMenu("About");
		menuBar.add(menu3);
		menu3Item = new JMenuItem("About");
		menu3Item.addActionListener(this);
		menu3.add(menu3Item);
	}

	/**Metodo para ejecutar las opciones del menu.
	* @param e Evento que genera la accion.
	*/
	public void actionPerformed(ActionEvent e){
		JMenuItem source = (JMenuItem)(e.getSource());

		if(source.getText() == "Terminar" ){
			int res = JOptionPane.showConfirmDialog(this,"Seguro desea salir?","Tombola",JOptionPane.YES_NO_OPTION );
			if( res == JOptionPane.YES_OPTION ) System.exit(0);
		}

		if(source.getText() == "Abrir"){
			selector.addChoosableFileFilter(new TextFilter());
			int returnVal = selector.showOpenDialog(TombolaFrame.this);
			if (returnVal == JFileChooser.APPROVE_OPTION){
				file = selector.getSelectedFile();
				curso = new Nombres(file.getPath());
				try{p = curso.contar();}
				catch(IOException ex){System.err.println("error ");}

				lista = new Estudiante[p];
				try{lista = curso.tomar();}
				catch(IOException ex){System.err.println("error ");}

				jt1.setText("");

				for (int i = 0; i < p; i++){
					try{
						jt1.getStyledDocument().insertString(jt1.getStyledDocument().getLength(),lista[i].getName()+"\n", attrs);
					}
					catch (Exception err){err.printStackTrace();}
				}
			}
		}

		if(source.getText() == "Rodar"){
			if(p==0) JOptionPane.showMessageDialog(null, "Debe abrir un archivo", "Error", JOptionPane.ERROR_MESSAGE);
			else{
				jt2.setText("");
				lista_random = new Estudiante[p];
				try{lista_random = curso.tomar();}
				catch(IOException ex){System.err.println("error ");}
				BubbleSorter ord = new BubbleSorter();
				ord.ordenar(lista_random);
				for (int i = 0; i < p; i++){
					try{
						jt2.getStyledDocument().insertString(jt2.getStyledDocument().getLength(),(i+1) +") " +lista_random[i].getName()+"\n", attrs);
					}
					catch (Exception err){err.printStackTrace();}
				}
				rodado=true;
			}
		}
      
		if(source.getText()=="Buscar"){
			if(!rodado) JOptionPane.showMessageDialog(null, "Debe rodar primero", "Error", JOptionPane.ERROR_MESSAGE);
			else{
				String nombre = (String)JOptionPane.showInputDialog(null,"Ingrese el Nombre o Apellido que desea buscar" ,"Tombola: Buscar",	JOptionPane.PLAIN_MESSAGE); 
				jt2.setText("");
				for(int i=0;i<p;i++){
					if(lista_random[i].getName().matches("(?i).*"+nombre+".*")){
						try{
							StyleConstants.setBackground(attrs,Color.blue);
							StyleConstants.setForeground(attrs,Color.white);
							jt2.getStyledDocument().insertString(jt2.getStyledDocument().getLength(),(i+1) +") " +lista_random[i].getName()+"\n", attrs);
							StyleConstants.setForeground(attrs,Color.black);
							StyleConstants.setBackground(attrs,Color.white);
						}
						catch (Exception err){err.printStackTrace();}
					}
					else {
						try{
							jt2.getStyledDocument().insertString(jt2.getStyledDocument().getLength(),(i+1) +") " +lista_random[i].getName()+"\n", attrs);
						}
						catch (Exception err){err.printStackTrace();}
					}
				}
			}
		}
		
		if(source.getText() == "About"){
			JOptionPane.showMessageDialog( this,"                             ELO-329\nDiseno y Programacion Orientados a Objetos\n          Alejandro Merello - Felipe Diaz\n           Profesor: Agustin J. Gonzalez\n                   Jueves 24 de Abril"
				,"Tombola",JOptionPane.INFORMATION_MESSAGE,icono); 
		}
	}
}