/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package puntocassa;


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.table.TableColumn;
import puntocassa.utils.QrCryptoService;
import puntocassa.utils.Utils;

/**
 *
 * @author Marco
 */
public class FrmCerca extends javax.swing.JFrame {

private PuntoCassa frmPuntoCassa;
private JTextField jtxtTessera;

   public int HFont=15;
   private int AltControlli=100;
   private int LargControlli=100;
   private int AltRigaGriglia=0;
   private String BP="";
   private Boolean FlagMostraDataNascita=true;
   private Boolean DisabilitaPerBuono=false;
   
   
    /**
     * Creates new form frm
     */
    public FrmCerca(PuntoCassa frm,JTextField jtxtT,String imgPath,String BuoniPasto,Boolean flagMostraDataNascita) {
        BP=BuoniPasto;
        frmPuntoCassa=frm;
        frmPuntoCassa.setEnabled(false);
        frmPuntoCassa.addRemoveKeyDispatcher(false);
        //KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(frmPuntoCassa.keyDispatcher);  
//        FlagMostraDataNascita=flagMostraDataNascita;
        jtxtTessera=jtxtT;
        initComponents();
        String startDir = System.getProperty("user.dir");
        File IconaApp = new File(startDir + "/risorse/logo.png");
        if (IconaApp.exists()) {

            ImageIcon icon = new ImageIcon(startDir + "/risorse/logo.png");
            this.setIconImage(icon.getImage());
        }

      ImageIcon icon = new ImageIcon(imgPath +"freccia_down.jpg");
      Image img = icon.getImage() ;  
      Image newimg = img.getScaledInstance(50,50,java.awt.Image.SCALE_SMOOTH ) ;  
      icon = new ImageIcon(newimg);  
      jbtnGiu.setIcon(icon);
      
      ImageIcon icon2 = new ImageIcon(imgPath +"freccia_up.jpg");
      Image img2 = icon2.getImage() ;   
      Image newimg2 = img2.getScaledInstance(50,50,java.awt.Image.SCALE_SMOOTH ) ;  
      icon2 = new ImageIcon(newimg2);
      jbtnSu.setIcon(icon2);

        // --------------------------------------------------------------------
        // ** creo evento click jTblStudenti
        // --------------------------------------------------------------------
        jTblStudenti.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {

                if (e.getClickCount() == 1) {
                             //JTable target = (JTable) e.getSource();
                    //int row = target.getSelectedRow();
                    //int column = target.getSelectedColumn();
                    jBtnOKActionPerformed(null);
                }
            }
        });
        
        if (BuoniPasto.length()<=0){
            CercaValoriDefault();
        }else{
            //jtxtCognome.requestFocus();
            //jtxtCognome.setBackground(Color.yellow);
            DisabilitaPerBuono=true;
            
            jtxtCognome.setText(BuoniPasto);
            Cerca();
            Disabilita();
        }     
        
     
        
        jtxtNumTesseraHidden.addActionListener(e -> {
            System.out.println("QR letto: " + jtxtNumTesseraHidden.getText().trim());
            String valueRead = jtxtNumTesseraHidden.getText().trim();                        
            //decripting
                List<String> dataResult = QrCryptoService.decryptAndValidate(valueRead);
                //System.out.println("QR code decriptato: " + r);
                if(dataResult.get(0).equals("VALID")){
                    //verifica che il codice fiscale corrisponda ad una tessera 
                    String numTessera = Utils.mySelect("select numero from tessere where id_utente = (select id from utenti where codice_fiscale = '" +
                            dataResult.get(1) +
                            "')", "numero", frmPuntoCassa);
                    if(numTessera == null || "".equals(numTessera)){
                        //mostra un popup di errore UTENTE NON COLLEGATO AD UNA TESSERA
                        System.out.println("nessuna tessera collegata all'utente " + dataResult.get(1));
                        JOptionPane.showOptionDialog(this, "Nessuna tessera collegata all'utente " + dataResult.get(1) , "Attenzione",
                            JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, null, null);
                        jtxtNumTesseraHidden.setText("");
                        jtxtNumTessera.setText("");
                        return;
                    }
                    //scrivi il numero della tessera nel campo input
                    jtxtNumTessera.setText(numTessera);
                    jtxtNumTesseraHidden.setText("");
                    Cerca();
                }
                else {
                    System.out.println("QR non valido: "+ dataResult.get(1));
                    JOptionPane.showOptionDialog(this, dataResult.get(1) , "Attenzione",
                        JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, null, null);
                    jtxtNumTesseraHidden.setText("");
                    jtxtNumTessera.setText("");
                }
             });

        
    }

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

        pnl1 = new javax.swing.JPanel();
        lblCF = new javax.swing.JLabel();
        lblNome = new javax.swing.JLabel();
        lblCognome = new javax.swing.JLabel();
        jBtnCerca = new javax.swing.JButton();
        jScrollPane3 = new javax.swing.JScrollPane();
        jTblStudenti = new javax.swing.JTable();
        jtxtCognome = new javax.swing.JTextField();
        jtxtNome = new javax.swing.JTextField();
        jbtnAnnulla = new javax.swing.JButton();
        jLblTitolo = new javax.swing.JLabel();
        jtxtNumTessera = new javax.swing.JTextField();
        jBtnOK = new javax.swing.JButton();
        jbtnSu = new javax.swing.JButton();
        jbtnGiu = new javax.swing.JButton();
        jtxtNumTesseraHidden = new javax.swing.JTextField();

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

        lblCF.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        lblCF.setText("Num. Tessera:");

        lblNome.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        lblNome.setText("Nome:");

        lblCognome.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        lblCognome.setText("Cognome:");

        jBtnCerca.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jBtnCerca.setText("Cerca");
        jBtnCerca.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtnCercaActionPerformed(evt);
            }
        });

        jTblStudenti.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jTblStudenti.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {},
                {},
                {},
                {}
            },
            new String [] {

            }
        ));
        jScrollPane3.setViewportView(jTblStudenti);

        jtxtCognome.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jtxtCognome.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jtxtCognomeFocusGained(evt);
            }
        });
        jtxtCognome.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jtxtCognomeMouseClicked(evt);
            }
        });

        jtxtNome.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jtxtNome.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jtxtNomeFocusGained(evt);
            }
        });
        jtxtNome.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jtxtNomeMouseClicked(evt);
            }
        });

        jbtnAnnulla.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jbtnAnnulla.setText("Annulla");
        jbtnAnnulla.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnAnnullaActionPerformed(evt);
            }
        });

        jLblTitolo.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLblTitolo.setForeground(new java.awt.Color(255, 0, 0));
        jLblTitolo.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        jLblTitolo.setText("Cerca Tessera Attiva");

        jtxtNumTessera.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jtxtNumTessera.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jtxtNumTesseraFocusGained(evt);
            }
        });
        jtxtNumTessera.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jtxtNumTesseraMouseClicked(evt);
            }
        });

        jBtnOK.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jBtnOK.setText("OK");
        jBtnOK.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtnOKActionPerformed(evt);
            }
        });

        jbtnSu.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnSuActionPerformed(evt);
            }
        });

        jbtnGiu.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnGiuActionPerformed(evt);
            }
        });

        jtxtNumTesseraHidden.setPreferredSize(new java.awt.Dimension(0, 0));

        javax.swing.GroupLayout pnl1Layout = new javax.swing.GroupLayout(pnl1);
        pnl1.setLayout(pnl1Layout);
        pnl1Layout.setHorizontalGroup(
            pnl1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnl1Layout.createSequentialGroup()
                .addComponent(jLblTitolo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(256, 256, 256))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnl1Layout.createSequentialGroup()
                .addGroup(pnl1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jtxtCognome, javax.swing.GroupLayout.PREFERRED_SIZE, 177, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblCognome))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(pnl1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblNome)
                    .addComponent(jtxtNome, javax.swing.GroupLayout.PREFERRED_SIZE, 181, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(pnl1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pnl1Layout.createSequentialGroup()
                        .addComponent(lblCF)
                        .addGap(61, 61, 61)
                        .addComponent(jtxtNumTesseraHidden, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())
                    .addGroup(pnl1Layout.createSequentialGroup()
                        .addComponent(jtxtNumTessera, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jBtnCerca, javax.swing.GroupLayout.DEFAULT_SIZE, 128, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jbtnAnnulla, javax.swing.GroupLayout.DEFAULT_SIZE, 135, Short.MAX_VALUE))))
            .addComponent(jBtnOK, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGroup(pnl1Layout.createSequentialGroup()
                .addComponent(jScrollPane3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(pnl1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jbtnSu, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jbtnGiu, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)))
        );
        pnl1Layout.setVerticalGroup(
            pnl1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnl1Layout.createSequentialGroup()
                .addGroup(pnl1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pnl1Layout.createSequentialGroup()
                        .addComponent(jLblTitolo, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(pnl1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lblCognome)
                            .addComponent(lblNome)
                            .addComponent(lblCF)))
                    .addGroup(pnl1Layout.createSequentialGroup()
                        .addGap(18, 18, 18)
                        .addComponent(jtxtNumTesseraHidden, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(pnl1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(pnl1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jtxtNumTessera, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jBtnCerca, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jbtnAnnulla, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jtxtNome, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jtxtCognome, javax.swing.GroupLayout.Alignment.TRAILING))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(pnl1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                    .addGroup(pnl1Layout.createSequentialGroup()
                        .addComponent(jbtnSu, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jbtnGiu, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 50, Short.MAX_VALUE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jBtnOK, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 845, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addGap(6, 6, 6)
                    .addComponent(pnl1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addContainerGap()))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 322, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(pnl1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addContainerGap()))
        );

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

    private void jtxtNumTesseraFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jtxtNumTesseraFocusGained
        if (DisabilitaPerBuono==false){
            Tastiera(evt);
            jtxtNumTessera.setBackground(Color.yellow);
            jtxtNome.setBackground(Color.white);
            jtxtCognome.setBackground(Color.white);
        }
        
        jtxtNumTesseraHidden.requestFocusInWindow();
        
//        MyApplication MyA = new MyApplication();
//        if (MyA.TastieraVideo) {
//            if (MyA.UltimoTxt.equalsIgnoreCase(evt.getComponent().toString())) {
//                MyA.UltimoTxt = " ";
//            } else {
//                MyA.UltimoTxt = evt.getComponent().toString();
//                Tastiera((JTextField) evt.getComponent(), 0, 0);
//            }
//        }
    }//GEN-LAST:event_jtxtNumTesseraFocusGained

    private void jbtnAnnullaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnAnnullaActionPerformed
//        ClearTable((MyTableModel)jTblStudenti.getModel());

        //frmPuntoCassa.setEnabled(true);
        //frmPuntoCassa=null;
        this.dispose();
 
    }//GEN-LAST:event_jbtnAnnullaActionPerformed
    private void ClearTable(MyTableModel model) {
        try {
            for (Integer i = model.getRowCount() - 1; i >= 0; i--) {
                model.deleteRow(i);
            }
        } catch (Exception e) {
        }
    }
    private void Tastiera(JTextField jTxt,Integer MyX,Integer MyY){
        if (DisabilitaPerBuono==false){
            MyKeyBoard myk=new MyKeyBoard(this,true);
            myk.txt=jTxt;
            myk.parent=this;
            Rectangle s=this.getBounds();
            Rectangle s2=jTxt.getBounds();
            Integer l=s.x+s2.x+MyX;
            if(l+800>s.x+s.width){l=s.x+s.width-800;}
            myk.setBounds(l,s.y+s2.y+60+MyY, 800, 300);
            myk.setVisible(true);
        }

    }
    private void jtxtNomeFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jtxtNomeFocusGained
        Tastiera(evt);
        jtxtNome.setBackground(Color.yellow);
        jtxtNumTessera.setBackground(Color.white);
        jtxtCognome.setBackground(Color.white);
//        MyApplication MyA = new MyApplication();
//        if (MyA.TastieraVideo) {
//            if (MyA.UltimoTxt.equalsIgnoreCase(evt.getComponent().toString())) {
//                MyA.UltimoTxt = " ";
//            } else {
//                MyA.UltimoTxt = evt.getComponent().toString();
//                Tastiera((JTextField) evt.getComponent(), 0, 0);
//            }
//        }
    }//GEN-LAST:event_jtxtNomeFocusGained

    private void jtxtCognomeFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jtxtCognomeFocusGained
        if(BP.length()<=0){
            Tastiera(evt);
        }
        jtxtCognome.setBackground(Color.yellow);
                
        jtxtNumTessera.setBackground(Color.white);
        jtxtNome.setBackground(Color.white);
//        MyApplication MyA = new MyApplication();
//        if (MyA.TastieraVideo) {
//            System.out.print("jtxtCognomeFocusGained:" + evt.getComponent().toString());
//            if (MyA.UltimoTxt.equalsIgnoreCase(evt.getComponent().toString())) {
//                MyA.UltimoTxt = " ";
//            } else {
//                MyA.UltimoTxt = evt.getComponent().toString();
//                Tastiera((JTextField) evt.getComponent(), 0, 0);
//            }
//        }
    }//GEN-LAST:event_jtxtCognomeFocusGained

    private void jBtnCercaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnCercaActionPerformed
        Cerca();
    }//GEN-LAST:event_jBtnCercaActionPerformed
    public void Cerca() {
        if (jtxtCognome.getText().trim().length() <= 0 && jtxtNome.getText().trim().length() <= 0 && jtxtNumTessera.getText().trim().length() <= 0) {
            JOptionPane.showMessageDialog(this, "Inserire Cognome o Nome o Numero Tessera!", "Attenzione", JOptionPane.INFORMATION_MESSAGE);
            return;
        }

        Aggiorna();

    }
    private void Disabilita(){
        jtxtCognome.setEnabled(false);
        jtxtNome.setEnabled(false);
        jtxtNumTessera.setEnabled(false);
        jBtnCerca.setEnabled(false);
        jBtnOK.requestFocus();
    }
    private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed
        try{
            frmPuntoCassa.setEnabled(true);
            frmPuntoCassa.addRemoveKeyDispatcher(true);
            //KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(frmPuntoCassa.keyDispatcher);  
            frmPuntoCassa.toFront();
            frmPuntoCassa.repaint();
            frmPuntoCassa=null;
            this.dispose();
        }catch(Exception ex){}
    }//GEN-LAST:event_formWindowClosed

    private void jBtnOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnOKActionPerformed
        if (jTblStudenti.getSelectedRow() >= 0 ) {
            MyTableModel model = new MyTableModel();
            model = (MyTableModel) jTblStudenti.getModel();
            String nTessera = model.getValueAt(jTblStudenti.getSelectedRow(), 4).toString();
            
            jtxtTessera.setText(nTessera);
            this.dispose();
            frmPuntoCassa.cercaTessera();
            
        }
        
    }//GEN-LAST:event_jBtnOKActionPerformed

    private void jbtnSuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnSuActionPerformed
        // TODO add your handling code here:
        if(jTblStudenti.getSelectedRow()>0){
            jTblStudenti.setRowSelectionInterval(jTblStudenti.getSelectedRow()-1, jTblStudenti.getSelectedRow()-1);
            jTblStudenti.scrollRectToVisible(new Rectangle(jTblStudenti.getCellRect(jTblStudenti.getSelectedRow(), 0, true)));
        }
    }//GEN-LAST:event_jbtnSuActionPerformed

    private void jbtnGiuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnGiuActionPerformed
        // TODO add your handling code here:
        if(jTblStudenti.getSelectedRow()<jTblStudenti.getRowCount()-1){
            jTblStudenti.setRowSelectionInterval(jTblStudenti.getSelectedRow()+1, jTblStudenti.getSelectedRow()+1);
            jTblStudenti.scrollRectToVisible(new Rectangle(jTblStudenti.getCellRect(jTblStudenti.getSelectedRow(), 0, true)));
        }
    }//GEN-LAST:event_jbtnGiuActionPerformed

    private void jtxtNomeMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jtxtNomeMouseClicked
        Tastiera(evt);
    }//GEN-LAST:event_jtxtNomeMouseClicked

    private void jtxtCognomeMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jtxtCognomeMouseClicked
       Tastiera(evt);
    }//GEN-LAST:event_jtxtCognomeMouseClicked

    private void jtxtNumTesseraMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jtxtNumTesseraMouseClicked
       Tastiera(evt);
       
//       //attivazione webcam per lettura qr
//        Webcam webcam = Webcam.getDefault();
//        //webcam.setViewSize(new Dimension(1280, 720));
//        Dimension hd = new Dimension(1280, 720);
//        webcam.setCustomViewSizes(new Dimension[] { hd });
//        webcam.setViewSize(hd);
//
//        webcam.open();
//
//        while (true) {
//            BufferedImage image = webcam.getImage();
//            if (image == null) continue;
//
//            LuminanceSource source = new BufferedImageLuminanceSource(image);
//            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
//
//            try {
//                Result result = new MultiFormatReader().decode(bitmap);
//                System.out.println("QR Code trovato: " + result.getText());
//                //decripting
//                List<String> dataResult = QrCryptoService.decryptAndValidate(result.getText());
//                //System.out.println("QR code decriptato: " + r);
//                if(dataResult.get(0).equals("VALID")){
//                    //verifica che il codice fiscale corrisponda ad una tessera 
//                    String numTessera = Utils.mySelect("select numero from tessere where id_utente = (select id from utenti where codice_fiscale = '" +
//                            dataResult.get(1) +
//                            "')", "numero", frmPuntoCassa);
//                    if(numTessera == null || "".equals(numTessera)){
//                        //mostra un popup di errore UTENTE NON COLLEGATO AD UNA TESSERA
//                        System.out.println("nessuna tessera collegata all'utente " + dataResult.get(1));
//                        return;
//                    }
//                    //scrivi il numero della tessera nel campo input
//                    jtxtNumTessera.setText(numTessera);
//                    Cerca();
//                }
//                else {
//                    System.out.println("QR non valido: "+ dataResult.get(1));
//                }
//                break;
//            } catch (NotFoundException e) {
//                // Nessun QR code trovato nel frame
//            }
//        }
//
//        webcam.close();
       
    }//GEN-LAST:event_jtxtNumTesseraMouseClicked
    private void Tastiera(java.awt.event.MouseEvent evt) {
        MyApplication MyA = new MyApplication();
        if (MyA.tastieraVideo) {
            if (MyA.ultimoTxt.equalsIgnoreCase(evt.getComponent().toString())) {
                MyA.ultimoTxt = " ";
            } else {
                MyA.ultimoTxt = evt.getComponent().toString();
                Tastiera((JTextField) evt.getComponent(), 0, 0);
            }
        }
    }
    //java.awt.event.FocusEvent
    private void Tastiera(java.awt.event.FocusEvent evt) {
        MyApplication MyA = new MyApplication();
        if (MyA.tastieraVideo) {
            if (MyA.ultimoTxt.equalsIgnoreCase(evt.getComponent().toString())) {
                MyA.ultimoTxt = " ";
            } else {
                MyA.ultimoTxt = evt.getComponent().toString();
                Tastiera((JTextField) evt.getComponent(), 0, 0);
            }
        }
    }

    private void QueryDati(String Query,String QueryCount,String[] Colonne,String[] ColType, JTable jTbl,Boolean Editable){
     try{
        MyApplication MyA=new MyApplication();
        MyTableModel model = new MyTableModel( );
        model.setColumname(Colonne);
        
//        model.setEditable(Editable);
//        int [] colBool=new int[1];
//        colBool[0]=7;
//        model.setColBoolean(colBool);
//        int[] cols=new int[1];
//        cols[0]=7;
//        model.setColModificabile(cols);
        int rowCount=Integer.parseInt(Utils.mySelect(QueryCount, "righe", frmPuntoCassa));
        Object[][] data = RowData(Query, Colonne,ColType,rowCount);
        model.setData(data);

        try{jTbl.setModel(model);}catch(Exception e){}
        jTbl.setAutoCreateColumnsFromModel(true);

        jTbl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jTbl.getTableHeader().setFont(new Font("Tahoma", Font.BOLD, 16));
        jTbl.setFont(new Font("Tahoma", 0, 16));
        
        
        TableColumn column = jTbl.getColumn("id");
        column.setMinWidth(0);
        column.setMaxWidth(0);
        column.setWidth(0);
        column.setPreferredWidth(0);
        
//        if (FlagMostraDataNascita==false){
//        //Data di Nascita  
//            TableColumn column2 = jTbl.getColumn("Data di Nascita");
//            column2.setMinWidth(0);
//            column2.setMaxWidth(0);
//            column2.setWidth(0);
//            column2.setPreferredWidth(0);
//        }
        
        model.fireTableDataChanged();
        
        doLayout();
     }catch(NumberFormatException e){
     
        System.out.println("Query: " + e.getMessage());
     }
     
    } 
   private void Aggiorna() {
        try {
            
            String From=" From utenti inner join tessere on utenti.id=tessere.id_utente inner join categorie_utenti on utenti.id_categoria=categorie_utenti.id inner join categorie_utenti_fasce on categorie_utenti_fasce.id_categoria_utenti=categorie_utenti.id inner join fasce on categorie_utenti_fasce.id_fascia=fasce.id where tessere.id_stato=1 and Tessere.Data_Scadenza>=trunc(sysdate) ";
            String Where= "";// " and UPPER(Cognome) like '" + jtxtCognome.getText().trim().toUpperCase().replace("'", "''") + "%' ";
            if (jtxtCognome.getText().trim().length()>0){Where=Where + " and UPPER(Utenti.Cognome) like '" + jtxtCognome.getText().trim().toUpperCase().replace("'", "''") + "%' ";}
            if (jtxtNome.getText().trim().length()>0) {Where=Where + " and UPPER(Utenti.Nome) like '" + jtxtNome.getText().trim().toUpperCase().replace("'", "''") + "%'"; }
            if (jtxtNumTessera.getText().trim().length()>0) {Where=Where + " and UPPER(Tessere.Numero) like '" + jtxtNumTessera.getText().trim().toUpperCase().replace("'", "''") + "%'"; }
            String[] Col =     {"id","Cognome","Nome","Data di Nascita","Tessera","Data Scadenza", "Fascia"};
            String[] ColType = {"long", "text","text","data","text","data","text"};
            String QueryCount="Select count(*) as righe " + From + Where;
            QueryDati("select UTENTI.id, UTENTI.Cognome, Utenti.Nome, Utenti.Data_Di_Nascita, Tessere.Numero as Tessera, Tessere.Data_Scadenza, Fasce.Nome as Fascia " + From + Where + " order by Cognome,Nome", QueryCount, Col, ColType, jTblStudenti, false);
            
            //jTblStudenti.getColumn("Drawing").setPreferredWidth(200);
            

            
            Font f=new Font("Tahoma",0,20);         
            jTblStudenti.setFont(f);
            if(AltRigaGriglia==0){AltRigaGriglia=jTblStudenti.getRowHeight();}
//            txtUsername.setSize(CalcolaLarghezzaAltezza(txtUsername.getWidth(),LargControlli), CalcolaLarghezzaAltezza(txtUsername.getHeight(),AltControlli));   
 
            jTblStudenti.setRowHeight(25);
            
            //ClearTable((MyTableModel)jTblTessere.getModel());
            
            if (jTblStudenti.getRowCount() > 0) {
                jTblStudenti.setRowSelectionInterval(0, 0);
                
            }
            ///AggiornaTessera(0);


        } catch (Exception e) {
        }
    }
     private Integer CalcolaLarghezzaAltezza(Integer LarControllo,Integer Percentuale){
      Integer D = Percentuale - 100;
      if (D == 0) {
          return LarControllo;
      } else {
          Integer N = LarControllo + ((LarControllo * D) / 100);
          return N;
      }
  
  }
       public Object[][] RowData(String Query, String[] Cols, String[] ColType, int rowCount) {
        Object[][] rows = null;
        try {
            Connection dbConnection = DriverManager.getConnection(frmPuntoCassa.dbStringa, frmPuntoCassa.dbUsername, frmPuntoCassa.dbPassword);  
            Statement st = dbConnection.createStatement();
            ResultSet rs = st.executeQuery(Query);
            rows = new Object[rowCount][];
            int r = 0;
            while (rs.next()) {
                Object[] row = new Object[Cols.length];
                for (int i = 0; i < Cols.length; i++) {
                    if (rs.getString(Cols[i].replace(" ", "_")) == null) {
                        row[i] = "";
                    } else {
                        row[i] = rs.getString(Cols[i].replace(" ", "_"));
                    }
                    switch (ColType[i]) {
                        case "text":
                            if (rs.getString(Cols[i].replace(" ", "_")) == null) {
                                row[i] = "";
                            } else {
                                row[i] = rs.getString(Cols[i].replace(" ", "_"));
                            }
                            break;
                        case "integer":
                            if (rs.getString(Cols[i].replace(" ", "_")) == null) {
                                row[i] = 0;
                            } else {
                                row[i] = rs.getInt(Cols[i].replace(" ", "_"));
                            }
                            break;
                        case "long":
                            if (rs.getString(Cols[i].replace(" ", "_")) == null) {
                                row[i] = 0;
                            } else {
                                row[i] = rs.getLong(Cols[i].replace(" ", "_"));
                            }
                            break;
                        case "boolean":
                            if (rs.getString(Cols[i].replace(" ", "_")) == null) {
                                row[i] = false;
                            } else {
                                row[i] = rs.getBoolean(Cols[i].replace(" ", "_"));
                            }
                            break;
                        case "float":
                            if (rs.getString(Cols[i].replace(" ", "_")) == null) {
                                row[i] = 0.00;
                            } else {
                                String v = rs.getString(Cols[i].replace(" ", "_"));

                                row[i] = Float.parseFloat(v.replace(",", "."));
                            }

                            break;
                            
                         case "data":
                            row[i] = "";
                            if (rs.getString(Cols[i].replace(" ", "_")) != null) {
//                                Date d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.ITALY).parse(rs.getString(Cols[i]));
                                //SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
                                String[] d= rs.getString(Cols[i].replace(" ", "_")).split("-");
                                if (d.length>=3){
                                    row[i] = d[2].trim().substring(0, 2) + "/" + d[1] + "/" + d[0];
                                }
                            }

                            break;
                    }

                }
                rows[r] = row;
                r++;
                /*int id = rs.getInt("id");
                 String  name = rs.getString("name");
                 int age  = rs.getInt("age");
                 String  address = rs.getString("address");
                 float salary = rs.getFloat("salary");*/

            }
            rs.close();
            st.close();
            dbConnection.close();

        } catch (SQLException | NumberFormatException e) {
            System.err.println(e.getClass().getName() + ": " + e.getMessage());
        } finally {

            return rows;
        }

    }  
       
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(FrmCerca.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(FrmCerca.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(FrmCerca.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(FrmCerca.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FrmCerca(null,null,null,null,true).setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jBtnCerca;
    private javax.swing.JButton jBtnOK;
    private javax.swing.JLabel jLblTitolo;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JTable jTblStudenti;
    private javax.swing.JButton jbtnAnnulla;
    private javax.swing.JButton jbtnGiu;
    private javax.swing.JButton jbtnSu;
    private javax.swing.JTextField jtxtCognome;
    private javax.swing.JTextField jtxtNome;
    private javax.swing.JTextField jtxtNumTessera;
    private javax.swing.JTextField jtxtNumTesseraHidden;
    private javax.swing.JLabel lblCF;
    private javax.swing.JLabel lblCognome;
    private javax.swing.JLabel lblNome;
    private javax.swing.JPanel pnl1;
    // End of variables declaration//GEN-END:variables

    private void CercaValoriDefault() {
        try {
            MyApplication MyA = new MyApplication();
            String txtbox = Utils.mySelect("Select Valore from PARAMETRI where chiave='ImpostaTesseraCampo'", "Valore", frmPuntoCassa);
            String txtboxValore = Utils.mySelect("Select Valore from PARAMETRI where chiave='ImpostaTesseraStringa'", "Valore", frmPuntoCassa);

            if (txtbox.equalsIgnoreCase("COGNOME")) {
                jtxtCognome.requestFocus();
                jtxtCognome.setBackground(Color.yellow);
                jtxtCognome.setText(txtboxValore);
            }
            if (txtbox.equalsIgnoreCase("NOME")) {
                jtxtNome.requestFocus();
                jtxtNome.setBackground(Color.yellow);
                jtxtNome.setText(txtboxValore);
            }
            if (txtbox.equalsIgnoreCase("TESSERA")) {
                jtxtNumTessera.requestFocus();
                jtxtNumTessera.setBackground(Color.yellow);
                jtxtNumTessera.setText(txtboxValore);
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, ex.getMessage());
        }
    }
}
