/* programma di prova
questo programma  vi insegnerà a 
creare un form nella GUI e accedere e visualizzare
i dati 
*/


//librerie importate
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.table.*;
import java.awt.BorderLayout;

import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;


//classe principale
class SwingDemo1 { 

	
	//modello classe swigdemo1
	SwingDemo1 () {

		//parametri per la connessione al database MYSQL
		String DB_URL = "jdbc:mysql://127.0.0.1:3306/marco";
		String USER = "root";
		String PASS = "AmUnAKTRA76@";
		int MyC=0; 
		int MyRcount=0;
		// Crea un nuovo contenitore JFrame"Una semplice swing application"
		JFrame jfr = new JFrame("Una semplice swing application");
		
		//Fornisce le dimensioni iniziali della FRAME 
		jfr.setSize(800,800);

		//Fornisce la posizione sullo schermo della FRAME 
		jfr.setLocation(200,200);

		//Termina il programma quando l'utente chiude la finestra
		jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
	
		//Leggo il numero di righe in della tabella
		try {
		Connection conn = DriverManager.getConnection(DB_URL,USER,PASS); //parametri di connessione
        Statement stmt = conn.createStatement(); //creo uno statement usando la connessione
        ResultSet rs = stmt.executeQuery("SELECT count(*) as pippo FROM tabrub;"); //esegui la query al database
			System.out.println("Connessione al database riuscita!"); //se tutto ok stampo stato
			
			// Processa il ResultSet
            MyC=0;
			rs.next();
			MyC=rs.getInt("pippo");
			MyRcount=MyC;
		
		} catch (SQLException e) { //se errore stampo sullo schermo
			System.err.println("Errore di connessione al database:");
            e.printStackTrace();
		}

		
	
		//creazione tabella da inserire nel form
		String[] intestazioni = {"Id", "Nome", "Cognome", "Tel", "E-mail"};
		//Object[][] dati = { {"0", "Mario", "Rossi", "00000", "miemail" }};
		//Object[][] dati = { {"0", "Mario", "Rossi", "00000", "miemail" } };
		Object[][] dati = new Object[MyRcount][5];
		//Object[][] dati = { } ;
		// la tabellacarico la combo box con i valori della tab1 del database 
		
		try {
		Connection conn = DriverManager.getConnection(DB_URL,USER,PASS); //parametri di connessione
        Statement stmt = conn.createStatement(); //creo uno statement usando la connessione
        ResultSet rs = stmt.executeQuery("SELECT * FROM tabrub;"); //esegui la query al database
			System.out.println("Connessione al database riuscita!"); //se tutto ok stampo stato
			 // Processa il ResultSet
            MyC=0;
				
			while (rs.next()) { //per tutti i record contenuti nella query
                // popolo la combo box con il valori di riga del recordset
                //combo.addItem(new ComboItem("1", "Mela"));
				dati[MyC][0]=rs.getString("id");
				dati[MyC][1]=rs.getString("nome");
				dati[MyC][2]=rs.getString("cognome");
				dati[MyC][3]=rs.getString("telefono");
				dati[MyC][4]=rs.getString("email");
				MyC++;
			}

		} catch (SQLException e) { //se errore stampo sullo schermo
			System.err.println("Errore di connessione al database:");
            e.printStackTrace();
		}

		
		JTable table = new JTable(dati, intestazioni);
		JScrollPane scrollPane = new JScrollPane(table);
		scrollPane.setSize(800,400);
		scrollPane.setLocation(10,10);

		
		/*
		// Aggiungo il Listner per la tabella 
		table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
		@Override
			public void valueChanged(ListSelectionEvent event) {
				// Ensure the event is not adjusting (prevents duplicate calls)
				if (!event.getValueIsAdjusting() && table.getSelectedRow() > -1) {
					// Get the selected row and column indices
					int row = table.getSelectedRow();
					int column = table.getSelectedColumn();
					System.out.println("Riga="+row+" - Col.="+column+"");
			
					// Perform your action, e.g., print the value of the first column
					System.out.println("Selected value: " + table.getValueAt(row, 0));
					campoTesto1.setText(table.getValueAt(row, 0)+" Pippo");
					
					//campoTesto1.setString(table.getValueAt(row, 0));
				}
			}
		});
		*/

		//Crea una pannello che conterra' tutti gli elementi ad esclusione tabella
		JPanel jlab = new JPanel();

		//specifico dimensioni iniziali e posizione
		jlab.setLocation(1,500);
		jlab.setSize(800,200);

		// 1. Creazione componenti prima casella di testo
        JTextField campoTesto = new JTextField(20); // 20 colonne di larghezza
        campoTesto.setSize(200,20);
		campoTesto.setLocation(10,30);
		
        // 2. Creazione componenti seconda casella di testo
        JTextField campoTesto1 = new JTextField(20); // 20 colonne di larghezza
        campoTesto1.setSize(200,20);
		campoTesto1.setLocation(10,60);

		// 4. creazione primo pulsante
		JButton bottone = new JButton("Saluta");
		bottone.setSize(100,60);
		bottone.setLocation(10,150);

		// 3. Creazione del terzo campo di testo
		JTextField campoTesto3 = new JTextField(20); // 20 colonne di larghezza
        campoTesto3.setSize(200,20);
		campoTesto3.setLocation(10,220);
		campoTesto3.setText("0");
		
		// 4. creazione secondo pulsante
		JButton bottone2 = new JButton("INSERIMENTO");
		bottone2.setSize(100,60);
		bottone2.setLocation(10,300);
	
		// 4. creazione TERZO  pulsante
		JButton bottone3 = new JButton("MODIFICA");
		bottone3.setSize(100,60);
		bottone3.setLocation(10,380);// 4. creazione secondo pulsante
		
		// 4. creazione quarto pulsante
		JButton bottone4 = new JButton("CANCELLAZIONE");
		bottone4.setSize(100,60);
		bottone4.setLocation(10,480);
	
		// Aggiungo il Listner per la tabella 
		table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
		@Override
			public void valueChanged(ListSelectionEvent event) {
				// Ensure the event is not adjusting (prevents duplicate calls)
				if (!event.getValueIsAdjusting() && table.getSelectedRow() > -1) {
					// Get the selected row and column indices
					int row = table.getSelectedRow();
					int column = table.getSelectedColumn();
					System.out.println("Riga="+row+" - Col.="+column+"");
			
					// Perform your action, e.g., print the value of the first column
					System.out.println("Selected value: " + table.getValueAt(row, 0));
					campoTesto1.setText(table.getValueAt(row, 0)+" Pippo");
					
					//campoTesto1.setString(table.getValueAt(row, 0));
				}
			}
		});

		//aggiunta action lister per il primo bottone 
		bottone.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				//se si verifica l'evento visualizzo nel secondo testo un contenuto
				campoTesto1.setText(campoTesto.getText()+" Pippo");
			}
		});
		


		//aggiunta action lister per il secondo bottone
		bottone2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {

			String sql2 = "INSERT INTO tab1 (nome) VALUES ( ? );"; //SQL di inserimento dati nel database
		
				try (Connection con = DriverManager.getConnection(DB_URL,USER,PASS);  //connetto al database
					PreparedStatement pstmt = con.prepareStatement(sql2)) {  //preparo SQL inserimento

					// Impostazione dei parametri mancanti
					pstmt.setString(1,campoTesto.getText()); // Primo '?'

					// Esecuzione dell'inserimento
					int righeInserite = pstmt.executeUpdate();
					System.out.println("Righe inserite: " + righeInserite); //numero di righe inserite
				} catch (SQLException e) {  //se errore lo stampo 
					e.printStackTrace();
				}
			}
		});
		//aggiunta action lister per il terzo bottone
		bottone3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {

			String sql2 = "update tab1 set nome=? where id="+campoTesto3.getText()+";"; //SQL di inserimento dati nel database
		
				try (Connection con = DriverManager.getConnection(DB_URL,USER,PASS);  //connetto al database
					PreparedStatement pstmt = con.prepareStatement(sql2)) {  //preparo SQL inserimento

					// Impostazione dei parametri mancanti
					pstmt.setString(1,campoTesto.getText()); // Primo '?'

					// Esecuzione dell'inserimento
					int righeInserite = pstmt.executeUpdate();
					System.out.println("Righe inserite: " + righeInserite); //numero di righe inserite
				} catch (SQLException e) {  //se errore lo stampo 
					e.printStackTrace();
				}
			}
		});
		//aggiunta action lister per il quarto bottone
		bottone4.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {

			String sql2 = "delete from tab1 where id= ? ;"; //SQL di inserimento dati nel database
		
				try (Connection con = DriverManager.getConnection(DB_URL,USER,PASS);  //connetto al database
					PreparedStatement pstmt = con.prepareStatement(sql2)) {  //preparo SQL inserimento

					// Impostazione dei parametri mancanti
					pstmt.setString(1,campoTesto3.getText()); // Primo '?'

					// Esecuzione dell'inserimento
					int righeInserite = pstmt.executeUpdate();
					System.out.println("Righe inserite: " + righeInserite); //numero di righe inserite
				} catch (SQLException e) {  //se errore lo stampo 
					e.printStackTrace();
				}
			}
		});

			
		// 2. Aggiunta componenti al pannellino label 
		// e solo la tabella al form
		
        jlab.setSize(800,300);
		jlab.setLocation(1,300);
		jlab.add(campoTesto);
		jlab.add(campoTesto1);
		jlab.add(bottone);
		jlab.add(campoTesto3);
		jlab.add(bottone2);
		jlab.add(bottone3);
		jlab.add(bottone4);
		
		
				
		JPanel pannello = new JPanel();
		
		//La aggiungo al form
		pannello.add(scrollPane); //, BorderLayout.CENTER);
		pannello.add(jlab);
		
		jfr.add(pannello);
		
		//jfr.add(pannello);
		// visualizza il form
		jfr.setVisible(true);

	}

	// chiamata a main
	public static void main(String args[]) {
		// Crea una frame sul thread di esecuzione evitando sovraccarico CPU
		SwingUtilities.invokeLater(new Runnable() {
			public void run ()	{
				new SwingDemo1();
			}
		});
	}
}