/* 
* 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 java.awt.Component;
import java.awt.Font;
import java.sql.*;
import java.util.*;
import javax.swing.*;

import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import administrador.datos.BaseDeDatos;
import administrador.datos.TableModelResultSet;

public final class FormTransmisiones extends javax.swing.JFrame {

    private BaseDeDatos bd;
    private DefaultTableModel modelo;
    private DefaultTableModel modelo2;
    private final String maquina;
    private String cadenaSql = "";
    private int pos = 0;
    private int total;
    private final PanelServidor panel;
    private final int tipoVentana;

    public FormTransmisiones(PanelServidor panel, int panelMuerto) {
        maquina = panel.servidorSql;
        tipoVentana = panelMuerto;
        this.panel = panel;
        initComponents();
        if (panelMuerto == 2) {
            setTitle("Visor Transmisiones Recibidas");
            cadenaSql = "Select * from Transmisiones where tarea = 'recepcion' and fecha > (getdate() - 7)";
        } else {
            setTitle("Visor Transmisiones Enviadas");
            cadenaSql = "Select * from Transmisiones where tarea = 'transmision' and fecha > (getdate() - 7)";
        }
        jTabPanel.remove(panelMuerto);
        if (!panel.soyLocal) {
            jTabPanel.remove(2);
        }

        prepararDatos();
        setLocationRelativeTo(null);
        this.setSize(600, 400);
        java.util.Date ayer = ajusteAyer();
        fecha2.setDate(ayer);
        fecha2.setMaxSelectableDate(ayer);
        GregorianCalendar gcal = new GregorianCalendar();
        gcal.add(Calendar.DATE, -5);
        fecha1.setDate(gcal.getTime());
        fecha1.setMinSelectableDate(gcal.getTime());
        fecha1.getJCalendar().setWeekOfYearVisible(false);
        fecha2.getJCalendar().setWeekOfYearVisible(false);
    }

    public static java.util.Date ajusteAyer() {
        GregorianCalendar gc = new GregorianCalendar();
        gc.add(Calendar.DATE, -1);
        return gc.getTime();
    }

    public void prepararDatos() {
        bd = new BaseDeDatos();
        modelo = new DefaultTableModel();
        modelo2 = new DefaultTableModel();
        bd.estableceConexion(maquina);
        ResultSet rs = bd.dameLista(cadenaSql);
        TableModelResultSet.rellena(rs, modelo);
        jTabla.setModel(modelo);
        SegundoModelo(modelo);
        total = modelo.getRowCount() - 1;
        ActualizarSegundoModelo(0);
        jTabla2.setModel(modelo2);
        prepararGrid();
        LRegistros.setText((pos + 1) + " de " + (total + 1));
        bd.cierraConexion();
        bd = null;
    }

    public void prepararGrid() {
        jTabla2.getColumnModel().getColumn(0).setMaxWidth(120);
        jTabla2.getColumnModel().getColumn(0).setPreferredWidth(120);
        jTabla2.getColumnModel().getColumn(1).setMaxWidth(600);
        jTabla2.getColumnModel().getColumn(1).setPreferredWidth(600);
        jTabla2.getColumnModel().getColumn(1).setMaxWidth(600);
        jTabla2.getColumnModel().getColumn(0).setCellRenderer(new celdaNegrita());
        jTabla2.setRowHeight(20);
    }

    public void SegundoModelo(DefaultTableModel modelo) {
        String[] columnNames = {"", ""};
        modelo2.setColumnIdentifiers(columnNames);
        Object[] datosFila = new Object[2];
        for (int i = 0; i < modelo.getColumnCount(); i++) {
            datosFila[0] = modelo.getColumnName(i);
            datosFila[1] = " ";
            modelo2.addRow(datosFila);
        }
    }

    public void ActualizarSegundoModelo(int pos) {
        Object datos;
        jSiguiente.setEnabled(pos < total);
        jAnterior.setEnabled(pos > 0);
        if (total > -1) {
            for (int i = 0; i < modelo.getColumnCount(); i++) {
                datos = modelo.getValueAt(pos, i);
                modelo2.setValueAt(datos, i, 1);
            }
        }
        LRegistros.setText((pos + 1) + " de " + (total + 1));
    }

    public void CambiarPanel() {
        if (jTabla == null) {
            return;
        }
        if (this.jTabPanel.getSelectedIndex() > 0) {
            pos = jTabla.getSelectedRow();
            if (pos == -1) {
                pos = 0;
            }
            ActualizarSegundoModelo(pos);
            jTabla2.repaint();
        }
    }

    void seleccionarFilaGrid(JTable tabla1, java.awt.Point p) {
        int r = tabla1.rowAtPoint(p);
        if (r != -1) {
            tabla1.changeSelection(r, 0, false, false);
        }
    }

    boolean validarDatosPanelEnvios() {
        if (fecha1.getDate().after(fecha2.getDate())) {
            javax.swing.JOptionPane.showMessageDialog(this, "La fecha 'Desde' debe ser inferior o igual a la fecha 'Hasta'");
            return false;
        }
        return true;
    }

    void PulsadoSiguiente() {
        pos = pos + 1;
        ActualizarSegundoModelo(pos);
    }

    void PulsadoAnterior() {
        pos = pos - 1;
        ActualizarSegundoModelo(pos);
    }

    public class celdaNegrita extends JLabel implements TableCellRenderer {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int Row, int Col) {
            if (Col > 0) {
                return this;
            }
            JLabel label = new JLabel();
            label.setText((String) value);
            Font fuente;
            fuente = new Font("MS Sans Serif", Font.BOLD, 13);
            label.setFont(fuente);
            return label;
        }
    }

    void pulsadoRecibir() {
        if (JOptionPane.showConfirmDialog(this, "¿ Quiere enviar una solicitud de repetición de la descarga de Cita Previa?",
                "REPETICIÓN RECEPCION", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
            panel.comu.enviar(Comunicaciones.COD_REPETIR_RECEPCION, "");
        }
    }

    void pulsadoEnviar() {
        if (validarDatosPanelEnvios()) {
            if (JOptionPane.showConfirmDialog(this, "¿ Quiere enviar una solicitud de repetición del envio de datos estadísticos?",
                    "REPETICIÓN ENVIO", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
                java.text.SimpleDateFormat dateFormatDMA = new java.text.SimpleDateFormat("dd/MM/yyyy");
                String f1 = dateFormatDMA.format(fecha1.getDate());
                String f2 = dateFormatDMA.format(fecha2.getDate());
                panel.comu.enviar(Comunicaciones.COD_REPETIR_ENVIO, f2, f1);
            }
        }
    }

    void cerrarVentana() {
        panel.cerradaVentana(tipoVentana);

    }

    /**
     * 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.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jTabPanel = new javax.swing.JTabbedPane();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTabla = new javax.swing.JTable();
        jPanel5 = new javax.swing.JPanel();
        jPanel6 = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTabla2 = new javax.swing.JTable();
        jPanel4 = new javax.swing.JPanel();
        jSiguiente = new javax.swing.JButton();
        LRegistros = new javax.swing.JLabel();
        jAnterior = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        jEnviar = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        fecha1 = new com.toedter.calendar.JDateChooser();
        fecha2 = new com.toedter.calendar.JDateChooser();
        jPanel3 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        btRecibir = new javax.swing.JButton();

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

        jTabPanel.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                jTabPanelStateChanged(evt);
            }
        });
        jTabPanel.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                jTabPanelPropertyChange(evt);
            }
        });

        jTabla.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null}
            },
            new String [] {
                "Title 1", "Title 2"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jTabla.setDoubleBuffered(true);
        jTabla.setShowVerticalLines(false);
        jTabla.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jTablaMousePressed(evt);
            }
        });
        jScrollPane1.setViewportView(jTabla);

        jTabPanel.addTab("Lista", jScrollPane1);

        jPanel5.setLayout(new java.awt.BorderLayout());

        jPanel6.setLayout(new java.awt.BorderLayout());

        jScrollPane2.setBorder(null);
        jScrollPane2.setAutoscrolls(true);

        jTabla2.setBackground(new java.awt.Color(212, 208, 200));
        jTabla2.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jTabla2.setAlignmentX(4.5F);
        jTabla2.setAlignmentY(4.5F);
        jTabla2.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_LAST_COLUMN);
        jTabla2.setGridColor(javax.swing.UIManager.getDefaults().getColor("Button.background"));
        jTabla2.setShowHorizontalLines(false);
        jTabla2.setShowVerticalLines(false);
        jTabla2.setVerifyInputWhenFocusTarget(false);
        jScrollPane2.setViewportView(jTabla2);

        jPanel6.add(jScrollPane2, java.awt.BorderLayout.CENTER);

        jPanel4.setMinimumSize(new java.awt.Dimension(10, 20));
        jPanel4.setPreferredSize(new java.awt.Dimension(10, 40));
        jPanel4.setLayout(null);

        jSiguiente.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/derecha.gif"))); // NOI18N
        jSiguiente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jSiguienteActionPerformed(evt);
            }
        });
        jPanel4.add(jSiguiente);
        jSiguiente.setBounds(72, 7, 55, 25);

        LRegistros.setText("jLabel5");
        jPanel4.add(LRegistros);
        LRegistros.setBounds(158, 11, 34, 20);

        jAnterior.setIcon(new javax.swing.ImageIcon(getClass().getResource("/recursos/izquierda.gif"))); // NOI18N
        jAnterior.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jAnteriorActionPerformed(evt);
            }
        });
        jPanel4.add(jAnterior);
        jAnterior.setBounds(11, 7, 55, 25);

        jPanel6.add(jPanel4, java.awt.BorderLayout.NORTH);

        jPanel5.add(jPanel6, java.awt.BorderLayout.CENTER);

        jTabPanel.addTab("Detalle", jPanel5);

        jPanel2.setLayout(null);

        jEnviar.setText("Enviar");
        jEnviar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jEnviarActionPerformed(evt);
            }
        });
        jPanel2.add(jEnviar);
        jEnviar.setBounds(150, 130, 170, 40);

        jLabel1.setFont(new java.awt.Font("MS Sans Serif", 1, 13));
        jLabel1.setText("Repetición de la  transmisión de datos al DIT");
        jPanel2.add(jLabel1);
        jLabel1.setBounds(67, 11, 317, 20);

        jLabel2.setText("Desde");
        jPanel2.add(jLabel2);
        jLabel2.setBounds(20, 50, 50, 20);

        jLabel3.setText("Hasta");
        jPanel2.add(jLabel3);
        jLabel3.setBounds(230, 50, 40, 20);
        jPanel2.add(fecha1);
        fecha1.setBounds(70, 50, 140, 20);

        fecha2.setMaxSelectableDate(new java.util.Date(253370764895000L));
        jPanel2.add(fecha2);
        fecha2.setBounds(280, 50, 130, 20);

        jTabPanel.addTab("Repetir Envio Transmision", jPanel2);

        jPanel3.setLayout(null);

        jLabel4.setFont(new java.awt.Font("MS Sans Serif", 1, 13));
        jLabel4.setText("Repetición de la descarga de Cita Previa del dia");
        jPanel3.add(jLabel4);
        jLabel4.setBounds(67, 11, 310, 20);

        btRecibir.setFont(new java.awt.Font("MS Sans Serif", 0, 12));
        btRecibir.setText("Recibir");
        btRecibir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btRecibirActionPerformed(evt);
            }
        });
        jPanel3.add(btRecibir);
        btRecibir.setBounds(154, 122, 180, 41);

        jTabPanel.addTab("Repetir Recepcion ", jPanel3);

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

        pack();
    }// </editor-fold>//GEN-END:initComponents
    private void btRecibirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btRecibirActionPerformed
        pulsadoRecibir();
    }//GEN-LAST:event_btRecibirActionPerformed

    private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed
        cerrarVentana();
    }//GEN-LAST:event_formWindowClosed

    private void jAnteriorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jAnteriorActionPerformed
        PulsadoAnterior();
    }//GEN-LAST:event_jAnteriorActionPerformed

    private void jSiguienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jSiguienteActionPerformed
        PulsadoSiguiente();
    }//GEN-LAST:event_jSiguienteActionPerformed

    private void jEnviarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jEnviarActionPerformed
        pulsadoEnviar();
    }//GEN-LAST:event_jEnviarActionPerformed

    private void jTabPanelPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_jTabPanelPropertyChange
        CambiarPanel();
    }//GEN-LAST:event_jTabPanelPropertyChange

    private void jTablaMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTablaMousePressed
        seleccionarFilaGrid(jTabla, evt.getPoint());
    }//GEN-LAST:event_jTablaMousePressed

    private void jTabPanelStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_jTabPanelStateChanged
        CambiarPanel();
    }//GEN-LAST:event_jTabPanelStateChanged
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel LRegistros;
    private javax.swing.JButton btRecibir;
    private com.toedter.calendar.JDateChooser fecha1;
    private com.toedter.calendar.JDateChooser fecha2;
    private javax.swing.JButton jAnterior;
    private javax.swing.JButton jEnviar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JButton jSiguiente;
    private javax.swing.JTabbedPane jTabPanel;
    private javax.swing.JTable jTabla;
    private javax.swing.JTable jTabla2;
    // End of variables declaration//GEN-END:variables
}
