/*
 * Tareas.java
 *
 * Created on June 19, 2009, 8:43 AM
 */
package CapturarPantallas;

import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import java.sql.*;
import java.io.*;

/**
 * Esta clase se utiliza para capturar pantallas automatica  cada vez que se produzca un cambio 
 * de las mismas ademas permite modificar el nombre de las imagenes 
 * @author  Bantec inc.
 */
public class Tareas extends JFrame {
//hilo que permite revisar si existe un cambio de imagen en determinado tiempo
    SupervisaProceso t1;
    // directorio donde se encuentra las imagenes a modificar
    File dir;
    //imagen en blanco para comparacion
    BufferedImage imgBlanco;
    //imagen en blnaco para comparacion
    BufferedImage imgBlanco2;
    //array de nombre de los archivos
    String[] formPath;
    //contador de imagenes cangadas
    int count = 0;
    //contador de transacciones
    int countTrans = 0;
    //array de numero de transacciones
    String[] trans;
    //array de las descripciones de cada transaccion
    String[] descrip;
    //instancia de la clase ComparaImagenes
    private ComparaImagenes comparaimagenes = new ComparaImagenes();
    //instancia de la clase CapturarPantalla
    private CapturarPantalla capturarpantalla = new CapturarPantalla();

    /** constructor */
    public Tareas() {
        /**
         * Inicia todos los componentes del panel
         */
        initComponents();
        setBounds(0, 0, 1050, 700);
        /**
         * Carga imagenes para comparar
         */
        imgBlanco = comparaimagenes.toBufferedImage(new ImageIcon("C:\\Documents and Settings\\Ethgar\\My Documents\\NetBeansProjects\\CapturarPantallas\\imagenes\\blanco.png").getImage());
        imgBlanco2 = comparaimagenes.toBufferedImage(new ImageIcon("C:\\Documents and Settings\\Ethgar\\My Documents\\NetBeansProjects\\CapturarPantallas\\imagenes\\blanco1.png").getImage());
        /**
         * Determina el tamaño de las imagenes
         */
        if (imgBlanco != null) {
            System.out.println("imagen 1= " + imgBlanco.getWidth() + " X " + imgBlanco.getHeight());
        }
        if (imgBlanco2 != null) {
            System.out.println("imagen 2= " + imgBlanco2.getWidth() + " X " + imgBlanco2.getHeight());
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
        blanco = new javax.swing.JTextField();
        javax.swing.JButton jButton7 = new javax.swing.JButton();
        javax.swing.JButton jButton5 = new javax.swing.JButton();
        javax.swing.JButton jButton4 = new javax.swing.JButton();
        ruta = new javax.swing.JTextField();
        javax.swing.JLabel jLabel2 = new javax.swing.JLabel();
        javax.swing.JButton jButton1 = new javax.swing.JButton();
        tmensaje = new javax.swing.JTextField();
        javax.swing.JLabel jLabel5 = new javax.swing.JLabel();
        transaccion = new javax.swing.JTextField();
        javax.swing.JButton jButton10 = new javax.swing.JButton();
        javax.swing.JButton jButton8 = new javax.swing.JButton();
        nimg = new javax.swing.JTextField();
        javax.swing.JButton jButton3 = new javax.swing.JButton();
        javax.swing.JButton jButton6 = new javax.swing.JButton();
        imgPre = new javax.swing.JLabel();
        javax.swing.JLabel jLabel4 = new javax.swing.JLabel();
        javax.swing.JLabel jLabel6 = new javax.swing.JLabel();
        javax.swing.JLabel jLabel3 = new javax.swing.JLabel();
        javax.swing.JButton jButton9 = new javax.swing.JButton();
        subsistema = new javax.swing.JTextField();
        directorio = new javax.swing.JTextField();
        javax.swing.JButton jButton2 = new javax.swing.JButton();
        javax.swing.JLabel jLabel7 = new javax.swing.JLabel();
        javax.swing.JLabel jLabel1 = new javax.swing.JLabel();
        javax.swing.JLabel jLabel8 = new javax.swing.JLabel();
        javax.swing.JLabel jLabel9 = new javax.swing.JLabel();
        descripTrans = new javax.swing.JTextField();
        javax.swing.JButton jButton11 = new javax.swing.JButton();
        numTrans = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(153, 204, 255));
        getContentPane().setLayout(null);

        jPanel1.setBackground(new java.awt.Color(102, 153, 255));
        jPanel1.setLayout(null);

        blanco.setEditable(false);
        jPanel1.add(blanco);
        blanco.setBounds(130, 610, 260, 19);

        jButton7.setText("<<");
        jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed();
            }
        });
        jPanel1.add(jButton7);
        jButton7.setBounds(80, 510, 49, 23);

        jButton5.setText("Continuar");
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed();
            }
        });
        jPanel1.add(jButton5);
        jButton5.setBounds(710, 550, 100, 23);

        jButton4.setText("Consultar");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed();
            }
        });
        jPanel1.add(jButton4);
        jButton4.setBounds(750, 480, 90, 23);
        jPanel1.add(ruta);
        ruta.setBounds(660, 100, 350, 19);

        jLabel2.setText("Path");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(620, 100, 30, 20);

        jButton1.setText("Buscar Imagenes");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed();
            }
        });
        jPanel1.add(jButton1);
        jButton1.setBounds(750, 130, 140, 23);

        tmensaje.setEditable(false);
        jPanel1.add(tmensaje);
        tmensaje.setBounds(660, 70, 140, 19);

        jLabel5.setText("Nuevo Directorio");
        jPanel1.add(jLabel5);
        jLabel5.setBounds(240, 550, 100, 14);
        jPanel1.add(transaccion);
        transaccion.setBounds(210, 480, 60, 19);

        jButton10.setText(">>");
        jButton10.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton10ActionPerformed();
            }
        });
        jPanel1.add(jButton10);
        jButton10.setBounds(250, 580, 49, 23);

        jButton8.setText(">>");
        jButton8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton8ActionPerformed();
            }
        });
        jPanel1.add(jButton8);
        jButton8.setBounds(250, 510, 49, 23);
        jPanel1.add(nimg);
        nimg.setBounds(150, 550, 60, 19);

        jButton3.setText("Detener");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed();
            }
        });
        jPanel1.add(jButton3);
        jButton3.setBounds(900, 70, 80, 23);

        jButton6.setText("Iniciar");
        jButton6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton6ActionPerformed();
            }
        });
        jPanel1.add(jButton6);
        jButton6.setBounds(620, 550, 70, 23);

        imgPre.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        imgPre.setAutoscrolls(true);
        imgPre.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jPanel1.add(imgPre);
        imgPre.setBounds(30, 50, 570, 410);

        jLabel4.setText("Sub");
        jPanel1.add(jLabel4);
        jLabel4.setBounds(80, 480, 30, 20);

        jLabel6.setText("Número");
        jPanel1.add(jLabel6);
        jLabel6.setBounds(80, 550, 60, 20);

        jLabel3.setText("Tran");
        jPanel1.add(jLabel3);
        jLabel3.setBounds(180, 480, 30, 20);

        jButton9.setText("<<");
        jButton9.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton9ActionPerformed();
            }
        });
        jPanel1.add(jButton9);
        jButton9.setBounds(80, 580, 49, 23);
        jPanel1.add(subsistema);
        subsistema.setBounds(120, 480, 30, 19);
        jPanel1.add(directorio);
        directorio.setBounds(350, 550, 60, 19);

        jButton2.setText("Iniciar");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed();
            }
        });
        jPanel1.add(jButton2);
        jButton2.setBounds(820, 70, 70, 23);

        jLabel7.setText("Captura de Pantallas Automático ");
        jPanel1.add(jLabel7);
        jLabel7.setBounds(700, 50, 240, 20);

        jLabel1.setText("Alertas");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(80, 610, 50, 30);

        jLabel8.setText("Número Archivos");
        jPanel1.add(jLabel8);
        jLabel8.setBounds(440, 550, 100, 14);

        jLabel9.setText("Descripción");
        jPanel1.add(jLabel9);
        jLabel9.setBounds(290, 480, 70, 20);

        descripTrans.setEditable(false);
        jPanel1.add(descripTrans);
        descripTrans.setBounds(370, 480, 350, 19);

        jButton11.setText("Guardar");
        jButton11.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton11ActionPerformed();
            }
        });
        jPanel1.add(jButton11);
        jButton11.setBounds(150, 580, 80, 23);

        numTrans.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        numTrans.setText("10");
        jPanel1.add(numTrans);
        numTrans.setBounds(550, 550, 40, 19);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(0, 0, 1149, 800);

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void jButton2ActionPerformed() {//GEN-FIRST:event_jButton2ActionPerformed
// Inicia el proceso de Captura de imagenes Automatico
    t1 = new SupervisaProceso((int) (2000), (int) (500), "00");
    t1.start();
    tmensaje.setText("PROCESO INICIADO......");
}//GEN-LAST:event_jButton2ActionPerformed

private void jButton3ActionPerformed() {//GEN-FIRST:event_jButton3ActionPerformed
// Detiene el proceso automatico de Captura de pantallas
    t1.stop();
    tmensaje.setText("PROCESO DETENIDO......");
}//GEN-LAST:event_jButton3ActionPerformed

private void jButton1ActionPerformed() {//GEN-FIRST:event_jButton1ActionPerformed
// Abre el explorador para elejir el direcctorio
    count = 0;
    abrirArchivo();
}//GEN-LAST:event_jButton1ActionPerformed

private void jButton6ActionPerformed() {//GEN-FIRST:event_jButton6ActionPerformed
// Inicia el renombrar los archivos de manera automatico 
    count = 0;
    ruta.setText(dir.toString());
    filtrarArchivos(dir);
    procesarimg();
    System.out.println("SUBIENDO FORMULARIOS");
}//GEN-LAST:event_jButton6ActionPerformed

private void jButton5ActionPerformed() {//GEN-FIRST:event_jButton5ActionPerformed
// continua renombramdo los archivos de manera automatico
    procesarimg();
}//GEN-LAST:event_jButton5ActionPerformed

private void jButton4ActionPerformed() {//GEN-FIRST:event_jButton4ActionPerformed
//Consulta el numero de transacciones y nombre
    countTrans = 0;
    //instancia los array de descripcion y nuemro de transaccion
    descrip = new String[400];
    trans = new String[400];
    //consulta las transacciones 
    try {
        Conexion conn = new Conexion();
        trans = conn.getTransaccion(transaccion.getText(), subsistema.getText());
        descrip = conn.getDescripcion();
    } catch (SQLException sqle) {
        sqle.printStackTrace();
    }
   //presenta la primera transaccion
    transaccion.setText(trans[0]);
    descripTrans.setText(descrip[0]);
}//GEN-LAST:event_jButton4ActionPerformed

private void jButton7ActionPerformed() {//GEN-FIRST:event_jButton7ActionPerformed
// regresa al anterior  nombre de  la transaccion 
    if (countTrans > 0) {
        countTrans--;
        getTransaccion();
    }

}//GEN-LAST:event_jButton7ActionPerformed

private void jButton8ActionPerformed() {//GEN-FIRST:event_jButton8ActionPerformed
// siguiente nombre de la transaccion
    countTrans++;
    getTransaccion();

}//GEN-LAST:event_jButton8ActionPerformed

private void jButton9ActionPerformed() {//GEN-FIRST:event_jButton9ActionPerformed
//anterior imagen 
    cargarRuta();
    if (count > 0) {
        count--;
        paintImg(formPath[count]);
    }
}//GEN-LAST:event_jButton9ActionPerformed

private void jButton10ActionPerformed() {//GEN-FIRST:event_jButton10ActionPerformed
//siguiente imagen  
    cargarRuta();
    count++;
    paintImg(formPath[count]);
}//GEN-LAST:event_jButton10ActionPerformed

private void jButton11ActionPerformed() {//GEN-FIRST:event_jButton11ActionPerformed
// Guarda 1 por una las imagenes:
    System.out.println("+++" + nimg.getText() + "  " + dir);

    saveimg(comparaimagenes.cargarImg(nimg.getText(), dir.toString()), subsistema.getText() + trans[countTrans] + "1", directorio.getText());
    count++;
    paintImg(formPath[count]);
}//GEN-LAST:event_jButton11ActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Tareas().setVisible(true);
            }
        });
    }

    /**
     * busca el directorio
     */
    public void abrirArchivo() {

        /*Debe abrir frame para escoger la imagen y la deberá almacenar renderizada en la clase Datos del paquete datos en la variable estática imagen_fuente*/
        String path = "";
        //Crear y mostrar el cargador de archivos de imágenes
        JFrame frame = new JFrame();
        // String apuntar_a_este_directorio = "D:\\fuentes\\Formularios";
        String apuntar_a_este_directorio = "C:\\Documents and Settings\\Ethgar\\My Documents\\NetBeansProjects\\CapturarPantallas\\imagenes";
        JFileChooser fc = new JFileChooser(apuntar_a_este_directorio);
        int returnVal = fc.showOpenDialog(frame);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            path = fc.getSelectedFile().getPath();
            path = path.substring(0, path.lastIndexOf('\\'));
            System.out.println("path: " + path);
            System.out.println("Iniciando..................................... ");
            buscarPath(path);
            System.out.println("Fin..................................... ");
        }//f

    }

    /**
     * Confirma si el directorio existe
     * @param ppath dir
     */
    public void buscarPath(String ppath) {

        dir = new File(ppath);
        if (!dir.exists() || !dir.isDirectory() || !dir.canRead() || !dir.canWrite()) {
            System.out.println("LA RUTA  DE SUBIDA {0} NO EXISTE");
            ruta.setText("LA RUTA  DE SUBIDA  NO EXISTE");
        } else {
            ruta.setText(dir.toString());
        }
    }

    /**
     * Busaca todos los archivos .png
     * @param ppath direcctorio
     */
    public void filtrarArchivos(File ppath) {
        int c = 0;
        formPath = ppath.list();
        String[] auxPath = new String[formPath.length];
        for (String file : formPath) {
            if (file.indexOf(".png") < 0) {
                auxPath[c] = "1000.png";
                continue;
            }
            auxPath[c] = file;
            c++;
        }
        formPath = ordenar(auxPath);
    }

    /**
     * graba automaticamente las imagenes con el numero de trnasaccion y subsistema obtenidos desde
     * las base
     */
    public void procesarimg() {
        BufferedImage img = null;
        boolean isblanco = false;
        String file = null;
        int c = 0;
        System.out.println("--numero inicio " + count);
        for (int j = count; j < formPath.length; j++) {
            file = formPath[j];
            if (file.equals("1000.png")) {
                continue;
            }
            img = comparaimagenes.cargarImg(file, dir.toString());
            if (img != null) {
                isblanco = !comparaimagenes.compararImagenes(imgBlanco.getHeight() == img.getHeight() ? imgBlanco : imgBlanco2, img, 200);
                if (isblanco) {
                    blanco.setText("Imagen en blanco : " + file);
                    paintImg(trans[countTrans]);
                    System.out.println("numero vector " + count);
                    count++;
                    break;
                } else {
                    try {
                        saveimg(img, subsistema.getText() + trans[countTrans] + "1", directorio.getText());
                    } catch (Exception e1) {
                        System.out.println("numero " + count);
                        e1.printStackTrace();
                    }
                }
                count++;
            }
            if (c == Integer.parseInt(numTrans.getText())) {
                paintImg(trans[countTrans]);
                break;
            }
            c++;

        }
    }

    /**
     * Obtine el nombre Imagenes Ordenados Alfabeticamente 
     * 
     * @param auxPath path 
     * @return String[] nombre Imagenes Ordenados Alfabeticamente 
     */
    public String[] ordenar(String[] auxPath) {
        String aux;
        int n = auxPath.length;
        for (int i = 0; i < n - 1; i++) {
            for (int j = i + 1; j < n; j++) {
                if (getnumeroImg(auxPath[i]) > getnumeroImg(auxPath[j])) {
                    aux = auxPath[j];
                    auxPath[j] = auxPath[i];
                    auxPath[i] = aux;
                }
            }
        }
        return auxPath;
    }

    /**
     * Obtener el numero de la imagen
     * @param num
     * @return int 
     */
    public int getnumeroImg(String num) {
        return Integer.parseInt(num.substring(0, num.lastIndexOf(".png")));
    }

    /**
     * pinta la imagen en el panel 
     * @param pnombre 
     */
    public void paintImg(String pnombre) {
        nimg.setText(pnombre);
        imgPre.setIcon(new ImageIcon(comparaimagenes.cargarImg(pnombre, dir.toString()).getScaledInstance(imgPre.getWidth(), imgPre.getHeight(), 1)));
    }

    /**
     * Guarda la Image 
     * @param img Bufeerimage
     * @param pnombre nombre imagen
     * @param pdir directorio
     */
    public void saveimg(BufferedImage img, String pnombre, String pdir) {
        blanco.setText("");
        capturarpantalla.GuargaImagen(img, pnombre, pdir);
        countTrans++;
        getTransaccion();
    }

    /**
     * envia el valor de ta transaccion y descripcion
     */
    private void getTransaccion() {
        transaccion.setText(trans[countTrans]);
        descripTrans.setText(descrip[countTrans]);
    }

    /**
     * Busca las imagenes existentes en la ruta
     */
    public void cargarRuta() {
        if (ruta.getText() == null || ruta.getText().equals("")) {
            filtrarArchivos(dir);
            ruta.setText(dir.toString());
        }
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField blanco;
    private javax.swing.JTextField descripTrans;
    private javax.swing.JTextField directorio;
    private javax.swing.JLabel imgPre;
    private javax.swing.JTextField nimg;
    private javax.swing.JTextField numTrans;
    private javax.swing.JTextField ruta;
    private javax.swing.JTextField subsistema;
    private javax.swing.JTextField tmensaje;
    private javax.swing.JTextField transaccion;
    // End of variables declaration//GEN-END:variables
}
