/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 


package administrador;

import javax.swing.table.DefaultTableModel;
import administrador.datos.BaseDeDatos;
import administrador.datos.TableModelResultSet;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.DefaultComboBoxModel;

public final class FormOtrosDatos extends javax.swing.JFrame {

    private BaseDeDatos bd;
    private DefaultTableModel modelo;
    private DefaultComboBoxModel modelo2;
    private final String maquina;
    private final PanelServidor panel;
    private final int tipoVentana;

    public FormOtrosDatos(PanelServidor panel, int panelMuerto) {
        maquina = panel.servidorSql;
        tipoVentana = panelMuerto;
        this.panel = panel;
        initComponents();
        prepararDatos();
        setLocationRelativeTo(null);
        this.setSize(700, 550);
        fecha2.setDate(new java.util.Date());
        GregorianCalendar gcal = new GregorianCalendar();
        gcal.add(Calendar.DATE, -5);
        fecha1.setDate(gcal.getTime());
        fecha1.getJCalendar().setWeekOfYearVisible(false);
        fecha2.getJCalendar().setWeekOfYearVisible(false);
    }

    public void prepararDatos() {
        bd = new BaseDeDatos();
        modelo2 = new DefaultComboBoxModel();
        bd.estableceConexion(maquina);
        ResultSet rs = bd.dameLista("SELECT DISTINCT nombreProcedimiento from Productos");
        TableModelResultSet.rellena(rs, modelo2);
        jComboBox1.setModel(modelo2);
        bd.cierraConexion();
        bd = null;
    }

    public String PedirFechaInicial() {
        java.text.SimpleDateFormat dateFormatAMD = new java.text.SimpleDateFormat("yyyy-MM-dd");
        String f1 = dateFormatAMD.format(fecha1.getDate()) + " 00:00:00";
        String fin = " >= CONVERT(DATETIME,'" + f1 + "', 102)";
        return fin;
    }

    public String PedirFechaFinal() {
        java.text.SimpleDateFormat dateFormatAMD = new java.text.SimpleDateFormat("yyyy-MM-dd");
        String f1 = dateFormatAMD.format(fecha2.getDate()) + " 23:59:00";
        String fin = " <= CONVERT(DATETIME,'" + f1 + "', 102)";
        return fin;
    }

    public String PedirTipo() {
        if (jComboBox1.getSelectedIndex() < 0) {
            return null;
        }
        return (String) jComboBox1.getSelectedItem();
    }

    public void ejecutarConsulta() {
        String hora1 = PedirFechaInicial();
        String hora2 = PedirFechaFinal();
        String tipo = PedirTipo();
        if (tipo == null) {
            return;
        }
        bd = new BaseDeDatos();
        bd.estableceConexion(maquina);
        String SQL = "SELECT *  FROM Productos  WHERE Fecha " + hora1 + " AND Fecha " + hora2 + " AND nombreProcedimiento = '" + tipo + "' ORDER BY Fecha ";
        ResultSet rs = bd.dameLista(SQL);
        modelo = new DefaultTableModel();
        TableModelResultSet.rellena(rs, modelo);
        bd.cierraConexion();
        bd = null;
        jExportar.setEnabled(false);
        if (modelo.getRowCount() > 0) {
            jExportar.setEnabled(true);
            jTable1.setModel(modelo);
        }
    }

    public void ExportaAHojaExcell() {
        try {
            String ficheroExcel = crearFicheroXLS(modelo);
            Runtime.getRuntime().exec("rundll32 shell32.dll,ShellExec_RunDLL \"" + ficheroExcel + "\"");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public String crearFicheroXLS(DefaultTableModel modelo) {
        try {
            File temp = File.createTempFile("Ateneo", ".xls");
            int cab = modelo.getColumnCount();
            int row = modelo.getRowCount();
            String texto = "";
            PrintWriter out = new PrintWriter(new FileWriter(temp));
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < cab; i++) {
                sb.append(modelo.getColumnName(i)).append("\t");
            }
            out.println(sb.toString());
            for (int i = 0; i < row; i++) {
                sb = new StringBuilder();
                for (int col = 0; col < (cab - 1); col++) {
                    sb.append(modelo.getValueAt(i, col)).append("\t");
                }
                texto = ((String) modelo.getValueAt(i, 5)).replaceAll("#", "\t");
                sb.append(texto);
                out.println(sb.toString());
            }
            out.close();
            return temp.getAbsolutePath();
        } catch (IOException e) {
            return "error";
        }
    }

    public void tieneSeparador(DefaultTableModel modelo) {
        int cab = modelo.getColumnCount();
        int row = modelo.getRowCount();
        String valor = (String) modelo.getValueAt(0, 5);
        if (valor.indexOf('#') < 0) {
            return;
        }
        String[] campos = valor.split("#");
        Object[] etiquetas = new Object[cab + campos.length - 1];
        for (int i = 0; i < cab; i++) {
            etiquetas[i] = modelo.getColumnName(i);
        }
        modelo.setColumnIdentifiers(etiquetas);
        for (int i = 0; i < row; i++) {
            valor = (String) modelo.getValueAt(i, 5);
            campos = valor.split("#");
            for (int j = 0; j < campos.length; j++) {
                modelo.setValueAt(campos[j], i, cab + j - 1);
            }
        }
    }

    /**
     * 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() {

      jPanel1 = new javax.swing.JPanel();
      jLabel1 = new javax.swing.JLabel();
      jLabel2 = new javax.swing.JLabel();
      fecha1 = new com.toedter.calendar.JDateChooser();
      jLabel3 = new javax.swing.JLabel();
      fecha2 = new com.toedter.calendar.JDateChooser();
      jComboBox1 = new javax.swing.JComboBox();
      jLabel4 = new javax.swing.JLabel();
      jEjecutar = new javax.swing.JButton();
      jExportar = new javax.swing.JButton();
      jScrollPane1 = new javax.swing.JScrollPane();
      jTable1 = new javax.swing.JTable();

      setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
      setTitle("Resultados de Scripts");
      addWindowListener(new java.awt.event.WindowAdapter() {
         public void windowClosed(java.awt.event.WindowEvent evt) {
            formWindowClosed(evt);
         }
      });

      jPanel1.setBackground(new java.awt.Color(255, 255, 255));
      jPanel1.setMaximumSize(new java.awt.Dimension(32767, 100));
      jPanel1.setMinimumSize(new java.awt.Dimension(650, 100));
      jPanel1.setPreferredSize(new java.awt.Dimension(650, 100));
      jPanel1.setLayout(null);

      jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14));
      jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
      jLabel1.setText("Consulta Datos de Scripts");
      jPanel1.add(jLabel1);
      jLabel1.setBounds(4, 10, 680, 20);

      jLabel2.setText("Desde");
      jPanel1.add(jLabel2);
      jLabel2.setBounds(20, 40, 50, 20);
      jPanel1.add(fecha1);
      fecha1.setBounds(70, 40, 140, 20);

      jLabel3.setText("Tipo");
      jPanel1.add(jLabel3);
      jLabel3.setBounds(480, 40, 40, 20);
      jPanel1.add(fecha2);
      fecha2.setBounds(300, 40, 130, 20);

      jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Uno", "Dos" }));
      jPanel1.add(jComboBox1);
      jComboBox1.setBounds(530, 40, 150, 22);

      jLabel4.setText("Hasta");
      jPanel1.add(jLabel4);
      jLabel4.setBounds(250, 40, 40, 20);

      jEjecutar.setText("Ejecutar");
      jEjecutar.addActionListener(new java.awt.event.ActionListener() {
         public void actionPerformed(java.awt.event.ActionEvent evt) {
            jEjecutarActionPerformed(evt);
         }
      });
      jPanel1.add(jEjecutar);
      jEjecutar.setBounds(240, 70, 150, 23);

      jExportar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/EXCEL.gif"))); // NOI18N
      jExportar.setText("Exportar");
      jExportar.setEnabled(false);
      jExportar.addActionListener(new java.awt.event.ActionListener() {
         public void actionPerformed(java.awt.event.ActionEvent evt) {
            jExportarActionPerformed(evt);
         }
      });
      jPanel1.add(jExportar);
      jExportar.setBounds(480, 70, 110, 25);

      getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);

      jScrollPane1.setBackground(new java.awt.Color(255, 255, 204));

      jTable1.setModel(new javax.swing.table.DefaultTableModel(
         new Object [][] {

         },
         new String [] {

         }
      ));
      jScrollPane1.setViewportView(jTable1);

      getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

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

private void jEjecutarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jEjecutarActionPerformed
    ejecutarConsulta();
}//GEN-LAST:event_jEjecutarActionPerformed

private void jExportarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jExportarActionPerformed
    ExportaAHojaExcell();
}//GEN-LAST:event_jExportarActionPerformed

private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed
    panel.cerradaVentana(tipoVentana);
}//GEN-LAST:event_formWindowClosed
    /**
     * @param args the command line arguments
     */
   // Variables declaration - do not modify//GEN-BEGIN:variables
   private com.toedter.calendar.JDateChooser fecha1;
   private com.toedter.calendar.JDateChooser fecha2;
   private javax.swing.JComboBox jComboBox1;
   private javax.swing.JButton jEjecutar;
   private javax.swing.JButton jExportar;
   private javax.swing.JLabel jLabel1;
   private javax.swing.JLabel jLabel2;
   private javax.swing.JLabel jLabel3;
   private javax.swing.JLabel jLabel4;
   private javax.swing.JPanel jPanel1;
   private javax.swing.JScrollPane jScrollPane1;
   private javax.swing.JTable jTable1;
   // End of variables declaration//GEN-END:variables
}
