import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
import com.fazecast.jSerialComm.*;
import javax.swing.text.*;
import java.sql.*;
import java.time.format.DateTimeFormatter; 
import java.time.LocalDateTime; 

 class Program {
	public static void main(String[] args)  {    
Gui scherm = new Gui();   
scherm.arduinoListener();
scherm.frameInstellingen();
scherm.scherm1();  
scherm.scherm2();
scherm.scherm3();
scherm.scherm4();
scherm.opneemPaneel();
scherm.bonScherm();
scherm.toevoegenBijPaneel();
    }
}

class Gui extends JFrame  {
/* private fields */
private JFrame f1;
private JPanel homeScreenPanel, scanPasPanel,pincodePanel,ingelogdPanel,opnemenPanel,incorrectPinMelding,meldingBlokkeren,passNotFoundMelding,bonPanel; 
private JPanel showBalanceMelding,SKMMelding,pasBlokerrenBijPinnen;
private JButton btnNaarScanPasPanel,btnNaarHome,btnLogin,btnSKM,showMoneyButton; 
private JButton btnNaarOpnemen,opneemButton,opnemenNaarP4;
private JButton plus10,min10,plus20,min20,plus50,min50,jaOptie,neeOptie,afbrekenBijBonOptie; 
private JLabel welkomLabel,scanPasLabel,labelWW,opneemLabel,pinClearen,incorrectInloggenLabel,labelBlokkeren,labelBlokkerenBijPinnen,passNotFoundLabel,showBalanceLabel;
private JLabel char1,char2,char3,char4,plus,min,biljet10,biljet20,biljet50;
private JLabel biljet10Counter,biljet20Counter,biljet50Counter,totalCounter,SKMLabel,bonTekst; 
private int num1,num2,num3;
private int lengteVanPincode=1;
private int incorrecteInlogPogingen;
private String pincode;
private int intResultPrice,intResultPrice2,intResultPrice3,gekozenBedrag;
private String pin1,pin2,pin3,pin4,result,result2,result3,resultTotal;
private Double balance;
private String gescandePas;
private Connection conn;
private Boolean connected=false;


public void frameInstellingen(){
f1 = new JFrame("GUI");
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f1.setSize(1900,1000);
System.out.println("");
}

public void scherm1(){ 

homeScreenPanel= new JPanel();
homeScreenPanel.setBackground(Color.CYAN);
f1.add(homeScreenPanel);
homeScreenPanel.setVisible(true);

//button gemaakt met een coordinaat,grootte,style.
btnNaarScanPasPanel = new JButton("( # ) Verder");
btnNaarScanPasPanel.setBounds(750,350,240, 40);   
btnNaarScanPasPanel.setFont(new Font("Calibri",Font.PLAIN,30));

//label gemaakt met een coordinaat,grootte,style.
welkomLabel=new JLabel();     
welkomLabel.setText("Welkom bij de bank");
welkomLabel.setBounds(700, 300, 500, 50);
welkomLabel.setFont(new Font("Serif",Font.ITALIC,40));

f1.setVisible(true);

}

public void scherm2(){
 
    scanPasPanel = new JPanel();
scanPasPanel.setBackground(Color.CYAN);
//f1.add(scanPasPanel);

//button gemaakt met een coordinaat,grootte,style.
btnNaarHome= new JButton(" ( * ) AFBREKEN");   
btnNaarHome.setBounds(100,900,300,40);   
btnNaarHome.setFont(new Font("Calibri",Font.PLAIN,30));

scanPasLabel=new JLabel("Scan uw pas");     
scanPasLabel.setBounds(800, 300, 500, 50);
scanPasLabel.setFont(new Font("Serif",Font.ITALIC,40));

passNotFoundMelding=new JPanel();
passNotFoundMelding.setBounds(800,500,200,100);

meldingBlokkeren=new JPanel();
meldingBlokkeren.setBounds(800,500,200,100);

passNotFoundLabel=new JLabel();
labelBlokkeren=new JLabel();

meldingBlokkeren.setVisible(false);
passNotFoundMelding.setVisible(false); 
scanPasPanel.setVisible(false);
}


public void scherm3(){  //Paneel 3

pincodePanel = new JPanel();
pincodePanel.setBackground(Color.CYAN);

btnLogin= new JButton("( # )Login");
btnLogin.setBounds(1000,340,200, 40);
btnLogin.setFont(new Font("Serif",Font.BOLD,30));

labelWW = new JLabel();
labelWW.setText("pincode: ");
labelWW.setBounds(690,340,200, 40);
labelWW.setFont(new Font("Serif",Font.BOLD,30));

pinClearen = new JLabel();
pinClearen.setText("C = Clear pin");
pinClearen.setBounds(1200,500,200, 40);
pinClearen.setFont(new Font("Serif",Font.BOLD,30));

/* nieuwe labels aangemaakt om te tonen hoeveel cijfers van de pin je al hebt ingevult.*/
char1=new JLabel();
char2=new JLabel();
char3=new JLabel();
char4=new JLabel();

/*Locatie,style en grootte aanpassen. De tekst van de labels naar _ veranderen. */
char1.setBounds(810,340,50,50);char1.setFont(new Font("Calibri", Font.BOLD,50));
char1.setText("_");
char2.setBounds(860,340,50,50);char2.setFont(new Font("Calibri", Font.BOLD,50));
char2.setText("_");
char3.setBounds(910,340,50,50);char3.setFont(new Font("Calibri", Font.BOLD,50));
char3.setText("_");
char4.setBounds(960,340,50,50);char4.setFont(new Font("Calibri", Font.BOLD,50));
char4.setText("_");

 
/*Panelen met locatie en grootte van component */
incorrectPinMelding=new JPanel();
incorrectPinMelding.setBounds(800,500,200,100);
pasBlokerrenBijPinnen=new JPanel();
pasBlokerrenBijPinnen.setBounds(800,500,200,100);

/*Labels bij de meldingen */
incorrectInloggenLabel= new JLabel();
labelBlokkerenBijPinnen=new JLabel();

/*Alle panelen op false zetten */
pasBlokerrenBijPinnen.setVisible(false);
incorrectPinMelding.setVisible(false);
pincodePanel.setVisible(false);
}


public void scherm4(){
ingelogdPanel= new JPanel();
ingelogdPanel.setBackground(Color.CYAN);

btnSKM= new JButton("(B) Snel 50 euro opnemen");    //SnelKeuzeMenu button wordt hier aangemaakt
btnSKM.setBounds(100,840,400, 40);
btnSKM.setFont(new Font("Serif",Font.BOLD,30));

showMoneyButton = new JButton("(A) Check Balance");
showMoneyButton.setBounds(100,740,340, 40);
showMoneyButton.setFont(new Font("Serif",Font.BOLD,30));

btnNaarOpnemen= new JButton("(C) geld opnemen");
btnNaarOpnemen.setBounds(1300,740,340, 40);
btnNaarOpnemen.setFont(new Font("Serif",Font.BOLD,30));

showBalanceMelding=new JPanel();
showBalanceMelding.setBounds(800,500,300,100);

showBalanceLabel=new JLabel();
showBalanceLabel.setFont(new Font("Serif",Font.BOLD,30));

SKMMelding = new JPanel();
SKMMelding.setBounds(800,500,300,100);

SKMLabel= new JLabel();
SKMLabel.setFont(new Font("Serif",Font.BOLD,30));

SKMMelding.setVisible(false);
showBalanceMelding.setVisible(false);
ingelogdPanel.setVisible(false);
}


public void opneemPaneel(){
/*Objecten gemaakt bij de opneemPaneel */
opnemenPanel = new JPanel();
opneemLabel = new JLabel(" Hoeveel geld wil je opnemen?");
plus = new JLabel();
min= new JLabel();
biljet10 = new JLabel();
biljet20 = new JLabel();
biljet50 = new JLabel();
plus10=new JButton("(1)");
min10=new JButton("(2)");
plus20=new JButton("(4)");
min20=new JButton("(5)");
plus50=new JButton("(7)");
min50=new JButton("(8)");
opneemButton = new JButton("(#) opnemen");
opnemenNaarP4 = new JButton("(D) terug");
biljet10Counter = new JLabel();
biljet20Counter = new JLabel();
biljet50Counter = new JLabel();
totalCounter= new JLabel();

opnemenPanel.setBackground(Color.CYAN); // kleur van achtergrond

/*locatie en grootte van componenten */
opneemLabel.setBounds(800, 200, 500, 50);
plus.setBounds(750,250,50,50);
min.setBounds(820,250,50,50);
biljet10.setBounds(600,300,200,50);
biljet20.setBounds(600,350,200,50);
biljet50.setBounds(600,400,200,50);
plus10.setBounds(750,300,50,50);
min10.setBounds(800,300,50,50);
plus20.setBounds(750,350,50,50);
min20.setBounds(800,350,50,50);
plus50.setBounds(750,400,50,50);
min50.setBounds(800,400,50,50);
opneemButton.setBounds(800,500,240, 40);
opnemenNaarP4.setBounds(700,900,340, 40);
biljet10Counter.setBounds(900,300,50,50);
biljet20Counter.setBounds(900,350,50,50);
biljet50Counter.setBounds(900,400,50,50);
totalCounter.setBounds(900,450,500,50);

/*schrijfstijl en grootte van tekst */
opneemLabel.setFont(new Font("Serif",Font.ITALIC,40));
plus.setFont(new Font("Serif",Font.BOLD,40));
min.setFont(new Font("Serif",Font.BOLD,40));
biljet10.setFont(new Font("Serif",Font.BOLD,40));
biljet20.setFont(new Font("Serif",Font.BOLD,40));
biljet50.setFont(new Font("Serif",Font.BOLD,40));
opneemButton.setFont(new Font("Serif",Font.BOLD,30));
opnemenNaarP4.setFont(new Font("Serif",Font.BOLD,30));
biljet10Counter.setFont(new Font("Serif",Font.ITALIC,40));
biljet20Counter.setFont(new Font("Serif",Font.ITALIC,40));
biljet50Counter.setFont(new Font("Serif",Font.ITALIC,40));
totalCounter.setFont(new Font("Serif",Font.ITALIC,40));

/*int wordt omgezet naar String */
result = String.valueOf(num1);
result2 = String.valueOf(num2);
result3 = String.valueOf(num3);

/*tekst van labels aanpassen */
min.setText("-");
plus.setText("+");
biljet10.setText("10 Euro");
biljet20.setText("20 Euro");
biljet50.setText("50 Euro");
biljet10Counter.setText(result);
biljet20Counter.setText(result2);
biljet50Counter.setText(result3);

opnemenPanel.setVisible(false);// op false zetten
}

public void bonScherm(){

bonPanel=new JPanel();
bonPanel.setBackground(Color.CYAN);

jaOptie=new JButton("(A) JA");
neeOptie=new JButton("(B) NEE");
afbrekenBijBonOptie=new JButton("(C) AFBREKEN");
bonTekst=new JLabel();     
bonTekst.setText("Wilt u een bon?");
bonTekst.setBounds(700, 300, 500, 50);
bonTekst.setFont(new Font("Serif",Font.ITALIC,40));


jaOptie.setBounds(550,350,120, 40);   
jaOptie.setFont(new Font("Calibri",Font.PLAIN,30));

neeOptie.setBounds(700,350,140, 40);   
neeOptie.setFont(new Font("Calibri",Font.PLAIN,30));

afbrekenBijBonOptie.setBounds(880,350,240, 40);   
afbrekenBijBonOptie.setFont(new Font("Calibri",Font.PLAIN,30));

bonPanel.setVisible(false);
}


public void toevoegenBijPaneel(){ //alles wordt hier bij de panelen toegevoegd.

/*setLayout(null) om de locatie van alle componenten zelf te bepalen. */ 
homeScreenPanel.setLayout(null);
scanPasPanel.setLayout(null);
pincodePanel.setLayout(null);
ingelogdPanel.setLayout(null);
opnemenPanel.setLayout(null);
bonPanel.setLayout(null);

/*eerste scherm*/
homeScreenPanel.add(welkomLabel);
homeScreenPanel.add(btnNaarScanPasPanel);

/*tweede scherm */
scanPasPanel.add(scanPasLabel);
scanPasPanel.add(passNotFoundMelding);
scanPasPanel.add(meldingBlokkeren);
meldingBlokkeren.add(labelBlokkeren);
passNotFoundMelding.add(passNotFoundLabel);

/*derde scherm */
pincodePanel.add(labelWW);
pincodePanel.add(btnLogin);
pincodePanel.add(char1);
pincodePanel.add(char2); 
pincodePanel.add(char3);
pincodePanel.add(char4);
pincodePanel.add(pinClearen); 
pincodePanel.add(incorrectPinMelding);
pincodePanel.add(pasBlokerrenBijPinnen);
pasBlokerrenBijPinnen.add(labelBlokkerenBijPinnen);
incorrectPinMelding.add(incorrectInloggenLabel);

/*vierde scherm */
ingelogdPanel.add(btnSKM);
ingelogdPanel.add(showMoneyButton);
ingelogdPanel.add(btnNaarOpnemen);
ingelogdPanel.add(showBalanceMelding);
ingelogdPanel.add(SKMMelding);
SKMMelding.add(SKMLabel);
showBalanceMelding.add(showBalanceLabel);

/*de geld opnemen scherm */
opnemenPanel.add(opneemLabel);
opnemenPanel.add(opneemButton);
opnemenPanel.add(opnemenNaarP4);
opnemenPanel.add(biljet10);
opnemenPanel.add(biljet20);
opnemenPanel.add(biljet50);
opnemenPanel.add(plus10);
opnemenPanel.add(min10);
opnemenPanel.add(plus20);
opnemenPanel.add(min20);
opnemenPanel.add(plus50);
opnemenPanel.add(min50);
opnemenPanel.add(plus);
opnemenPanel.add(min);
opnemenPanel.add(biljet10Counter);  
opnemenPanel.add(biljet20Counter);
opnemenPanel.add(biljet50Counter);
opnemenPanel.add(totalCounter);

/*Bon scherm */
bonPanel.add(jaOptie);
bonPanel.add(neeOptie);
bonPanel.add(afbrekenBijBonOptie);
bonPanel.add(bonTekst);
}



public void arduinoListener(){
		SerialPort comPort = SerialPort.getCommPort("COM7");
		
		comPort.setBaudRate(9600);
		
		//open the port
		comPort.openPort();
	
		//create a listener and start listening
		comPort.addDataListener(new SerialPortDataListener() {
			@Override
			public int getListeningEvents() { 
				return SerialPort.LISTENING_EVENT_DATA_AVAILABLE; 
			}
			@Override
			public void serialEvent(SerialPortEvent event)
			{
				if (event.getEventType() != SerialPort.LISTENING_EVENT_DATA_AVAILABLE)
				return; //wait until we receive data
			
				byte[] newData = new byte[comPort.bytesAvailable()]; //receive incoming bytes
				comPort.readBytes(newData, newData.length); //read incoming bytes
		String serialData = new String(newData); //convert bytes to string
              
      
        try{
            if(!connected){

            /*   Database connectie */
            String myDriver = "org.gjt.mm.mysql.Driver";
           // String myUrl = "jdbc:mysql://localhost/projectdatabase";
           String myUrl = "jdbc:mysql://145.24.222.203/projectDatabase";
            Class.forName(myDriver);
            // conn = DriverManager.getConnection(myUrl, "root", "");
             conn = DriverManager.getConnection(myUrl, "kaas", "pinguin");
            connected=true;
            }
			  if( homeScreenPanel.isVisible() && serialData.equals("#") ){// Als homeScreenPanel is visible en er wordt op de # knop gedrukt.
                 homeScreenPanel.setVisible(false);  //sluit homeScreenPanel
                 f1.validate();
                 f1.repaint();
                 f1.invalidate();
                 f1.getContentPane().add(scanPasPanel);
                 scanPasPanel.setVisible(true);   // open scanPasPanel
                 scanPasPanel.add(btnNaarHome);     //scanPasPanel krijgt een button die terug naar homeScreenPanel kan.
              }


//als scanPasPanel,pincodePanel of ingelogdPanel zichtbaar is en er wordt op * gedrukt. 
if((scanPasPanel.isVisible() || pincodePanel.isVisible() || ingelogdPanel.isVisible() || opnemenPanel.isVisible() ) && serialData.equals("*") ){
  /*Sluit de panelen */
    scanPasPanel.setVisible(false);
    pincodePanel.setVisible(false);
    ingelogdPanel.setVisible(false);
    f1.validate();
    f1.repaint();
    f1.invalidate();
    homeScreenPanel.setVisible(true);// ga terug naar de eerste panel.
    }


if(serialData.length()==8 && scanPasPanel.isVisible()){ //als scanPasPanel visible is en er wordt iets gelezen dat 8 karakter lang is.
    gescandePas= serialData;
    System.out.println("\n\n\n De pasnummer die net werd gescant = " + gescandePas + "\n\n\n");
    String query = ("SELECT * FROM accounts WHERE Pasnummer ='"+ gescandePas +"' " ); 
    
    Statement st = conn.createStatement();
    ResultSet rs = st.executeQuery(query);

    if (rs.next() ){    //als het bestaat in de database

    pincode = rs.getString("Pincode");
     balance= rs.getDouble("Balance");
     incorrecteInlogPogingen=rs.getInt("aantalfouten");

        if(incorrecteInlogPogingen<3){

     scanPasPanel.setVisible(false);
     f1.validate();
     f1.repaint();
     f1.invalidate(); 
     pincodePanel.add(btnNaarHome);
     f1.getContentPane().add(pincodePanel);
    pincodePanel.setVisible(true);  
        }else{
            labelBlokkeren.setText("Pas is geblokkeerd");
             meldingBlokkeren.setVisible(true);
         try {	             
         Thread.sleep(2000);                				
         }catch (InterruptedException e) {
             } 
             meldingBlokkeren.setVisible(false);
        }
    
    } else{  //als het niet bestaat in de database
        passNotFoundLabel.setText("Pas niet gevonden");
        passNotFoundMelding.setVisible(true);
            
    try {	              
    Thread.sleep(2000);                				
   }catch (InterruptedException e) {
     }
                passNotFoundMelding.setVisible(false);                      //melding sluit zich
            
    }

}


    if(pincodePanel.isVisible()){
        String query = ("SELECT * FROM accounts WHERE Pasnummer ='"+ gescandePas +"' " ); 
    
    Statement st = conn.createStatement();
    ResultSet rs = st.executeQuery(query);
 
       }

        /* Dit wordt gebruikt om de pincode, die 4 karakters lang is te lezen */
         if(serialData.equals("1") && pincodePanel.isVisible()  ){
            if(lengteVanPincode==1) {char1.setText("X");pin1="1";}
			if(lengteVanPincode==2) {char2.setText("X");pin2="1";}
			if(lengteVanPincode==3) {char3.setText("X");pin3="1";}
			if(lengteVanPincode==4) {char4.setText("X");pin4="1";}
			lengteVanPincode++;//Elke keer als je een getal invoerd,de lengteVanPincode groter.
        }
         if(serialData.equals("2") && pincodePanel.isVisible()){
            if(lengteVanPincode==1) {char1.setText("X");pin1="2";}
			if(lengteVanPincode==2) {char2.setText("X");pin2="2";}
			if(lengteVanPincode==3) {char3.setText("X");pin3="2";}
			if(lengteVanPincode==4) {char4.setText("X");pin4="2";}
			lengteVanPincode++;
        }
         if(serialData.equals("3") && pincodePanel.isVisible() ){
            if(lengteVanPincode==1) {char1.setText("X");pin1="3";}
			if(lengteVanPincode==2) {char2.setText("X");pin2="3";}
			if(lengteVanPincode==3) {char3.setText("X");pin3="3";}
			if(lengteVanPincode==4) {char4.setText("X");pin4="3";}
			lengteVanPincode++;
        }
         if(serialData.equals("4") && pincodePanel.isVisible() ){
            if(lengteVanPincode==1) {char1.setText("X");pin1="4";}
			if(lengteVanPincode==2) {char2.setText("X");pin2="4";}
			if(lengteVanPincode==3) {char3.setText("X");pin3="4";}
			if(lengteVanPincode==4) {char4.setText("X");pin4="4";}
			lengteVanPincode++;
        }
         if(serialData.equals("5") && pincodePanel.isVisible() ){
            if(lengteVanPincode==1) {char1.setText("X");pin1="5";}
			if(lengteVanPincode==2) {char2.setText("X");pin2="5";}
			if(lengteVanPincode==3) {char3.setText("X");pin3="5";}
			if(lengteVanPincode==4) {char4.setText("X");pin4="5";}
			lengteVanPincode++;
        }
         if(serialData.equals("6") && pincodePanel.isVisible()){
            if(lengteVanPincode==1) {char1.setText("X");pin1="6";}
			if(lengteVanPincode==2) {char2.setText("X");pin2="6";}
			if(lengteVanPincode==3) {char3.setText("X");pin3="6";}
			if(lengteVanPincode==4) {char4.setText("X");pin4="6";}
			lengteVanPincode++;
        }
         if(serialData.equals("7") && pincodePanel.isVisible() ){
            if(lengteVanPincode==1) {char1.setText("X");pin1="7";}
			if(lengteVanPincode==2) {char2.setText("X");pin2="7";}
			if(lengteVanPincode==3) {char3.setText("X");pin3="7";}
			if(lengteVanPincode==4) {char4.setText("X");pin4="7";}
			lengteVanPincode++;
        }
         if(serialData.equals("8") && pincodePanel.isVisible()){
            if(lengteVanPincode==1) {char1.setText("X");pin1="8";}
			if(lengteVanPincode==2) {char2.setText("X");pin2="8";}
			if(lengteVanPincode==3) {char3.setText("X");pin3="8";}
			if(lengteVanPincode==4) {char4.setText("X");pin4="8";}
			lengteVanPincode++;
        }
         if(serialData.equals("9") && pincodePanel.isVisible()){
            if(lengteVanPincode==1) {char1.setText("X");pin1="9";}
			if(lengteVanPincode==2) {char2.setText("X");pin2="9";}
			if(lengteVanPincode==3) {char3.setText("X");pin3="9";}
			if(lengteVanPincode==4) {char4.setText("X");pin4="9";}
			lengteVanPincode++;
        }
         if(serialData.equals("0") && pincodePanel.isVisible()){
            if(lengteVanPincode==1) {char1.setText("X");pin1="0";}
			if(lengteVanPincode==2) {char2.setText("X");pin2="0";} 
			if(lengteVanPincode==3) {char3.setText("X");pin3="0";}
			if(lengteVanPincode==4) {char4.setText("X");pin4="0";}
			lengteVanPincode++;
        }
        if(serialData.equals("C") && pincodePanel.isVisible()){ // iemand druk op C en is op de pincodepaneel.
            char1.setText("_");                //reset de karakters
            char2.setText("_");
            char3.setText("_");
            char4.setText("_");
            lengteVanPincode=0;               //pin weer leegmaken.
        }
    
        	  
String ingevoerdePin = String.valueOf(pin1 + pin2 + pin3 + pin4);// alle 4 Strings worden samen 1 String
    

         
    if(!pincodePanel.isVisible()){  //Als pincodePanel niet zichtbaar is.
        /*De pincode wordt omgezet naar streepjes om te laten zien dat de pin leeg is*/
    char1.setText("_");
    char2.setText("_");
    char3.setText("_");
    char4.setText("_");
    ingevoerdePin="____";
    lengteVanPincode=1;         //lengteVanPincode wordt weer naar 1 geplaats.

    }	


if(pincodePanel.isVisible() && ingevoerdePin.equals(pincode) && lengteVanPincode==5 && serialData.equals("#") && incorrecteInlogPogingen<3){//Het staat op paneel 3. ingevoerdePin is correct en lengteVanPincode is 5. En je drukt op #. En gescandePas is niet geblokeerd.
    pincodePanel.setVisible(false);
    f1.validate();
    f1.repaint();
    f1.invalidate();
    ingelogdPanel.add(btnNaarHome);
    f1.getContentPane().add(ingelogdPanel);
    ingelogdPanel.setVisible(true);
    incorrecteInlogPogingen=0;
    String query = ("UPDATE accounts SET aantalfouten=" + incorrecteInlogPogingen + " WHERE Pasnummer='"+ gescandePas +"' ");
    Statement st = conn.createStatement(); 
     st.executeUpdate(query);
}

if(lengteVanPincode>=5){
    lengteVanPincode=5;
}


if(pincodePanel.isVisible() && !ingevoerdePin.equals(pincode)  && serialData.equals("#") && incorrecteInlogPogingen<3){
    incorrecteInlogPogingen+=1;
    String query = ("UPDATE accounts SET aantalfouten=" + incorrecteInlogPogingen + " WHERE Pasnummer='"+ gescandePas +"' ");
    Statement st = conn.createStatement(); 
     st.executeUpdate(query);

     incorrectInloggenLabel.setText("incorrecte inlogpogingen: " + incorrecteInlogPogingen);
     incorrectPinMelding.setVisible(true); 

     try {	               
     Thread.sleep(2000);                				
    }catch (InterruptedException e) {
      } 
      incorrectPinMelding.setVisible(false);
      char1.setText("_");
      char2.setText("_");
      char3.setText("_");
      char4.setText("_");
      ingevoerdePin="____";
      lengteVanPincode=1;  


        }




if(incorrecteInlogPogingen>2 && pincodePanel.isVisible() && serialData.equals("#") ){

    labelBlokkerenBijPinnen.setText("Pas is geblokkeerd");
    pasBlokerrenBijPinnen.setVisible(true);
    try {	             
    Thread.sleep(2000);                				
   }catch (InterruptedException e) {
     } 
     pasBlokerrenBijPinnen.setVisible(false);

}

if(ingelogdPanel.isVisible() && serialData.equals("C") ){
    ingelogdPanel.setVisible(false);
    f1.validate();
    f1.repaint();
    f1.invalidate();
    f1.getContentPane().add(opnemenPanel);
    opnemenPanel.add(btnNaarHome);
    opnemenPanel.setVisible(true);
}
if(ingelogdPanel.isVisible() && serialData.equals("A") ){
  
    showBalanceLabel.setText("Balance = " + balance);
    showBalanceMelding.setVisible(true);

    try {	      // Wacht 2 seconden        
    Thread.sleep(2000);                				
   }catch (InterruptedException e) {
     } showBalanceMelding.setVisible(false);// melding sluit zich

    

}

if(ingelogdPanel.isVisible() && serialData.equals("B") ){
    if(balance>=50){
        SKMLabel.setText("U krijgt nu 50 euro");
        SKMMelding.setVisible(true);
                try {	              
                    Thread.sleep(2000);                				
                   }catch (InterruptedException e) {
                     }
      SKMMelding.setVisible(false);  

         ingelogdPanel.setVisible(false);
         f1.validate();
         f1.repaint();
         f1.invalidate();
         homeScreenPanel.setVisible(true);
         balance-=50;
         String query = ("UPDATE accounts SET Balance=" + balance + " WHERE Pasnummer='"+ gescandePas +"' ");
         Statement st = conn.createStatement(); 
          st.executeUpdate(query);

            }
            if(balance<50){
                SKMLabel.setText("Niet genoeg geld");
                SKMMelding.setVisible(true);
                try {	              
                    Thread.sleep(2000);                				
                   }catch (InterruptedException e) {
                     }
                                SKMMelding.setVisible(false);     
            }
}

if(opnemenPanel.isVisible() && serialData.equals("D")){
    opnemenPanel.setVisible(false);
    f1.validate();
    f1.repaint();
    f1.invalidate();
    f1.getContentPane().add(ingelogdPanel);
    ingelogdPanel.setVisible(true);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(opnemenPanel.isVisible() && serialData.equals("1")){
    num1++;
    result=String.valueOf(num1);
    biljet10Counter.setText(result);
    
    intResultPrice=Integer.valueOf(result)*10;
  
  
}
if(opnemenPanel.isVisible() && serialData.equals("2")){
    num1--;
    
    if(num1<0){
        num1=0;
    }
    result=String.valueOf(num1);
    biljet10Counter.setText(result);
    
    intResultPrice=Integer.valueOf(result)*10;
}
if(opnemenPanel.isVisible() && serialData.equals("4")){
    num2++;
    result2=String.valueOf(num2);
    biljet20Counter.setText(result2);
    intResultPrice2=Integer.valueOf(result2) * 20;
}
if(opnemenPanel.isVisible() && serialData.equals("5")){
    num2--;
    
    if(num2<0){
        num2=0;
    }
    result2=String.valueOf(num2);
    biljet20Counter.setText(result2);
   intResultPrice2=Integer.valueOf(result2) * 20;
}



if(opnemenPanel.isVisible() && serialData.equals("7")){
    num3++;
    result3=String.valueOf(num3);
    biljet50Counter.setText(result3);
    intResultPrice3=Integer.valueOf(result3)*50;
}
if(opnemenPanel.isVisible() && serialData.equals("8")){
    num3--;
    
    if(num3<0){
        num3=0;
    }
    result3=String.valueOf(num3);
    biljet50Counter.setText(result3);
    intResultPrice3=Integer.valueOf(result3) * 50;
}

if(opnemenPanel.isVisible() || bonPanel.isVisible()){
gekozenBedrag=intResultPrice+intResultPrice2+intResultPrice3;
resultTotal=String.valueOf(gekozenBedrag);
totalCounter.setText(resultTotal);
}
else{//als het niet op de opnemenPanel staat, reset dan alle waardes.
    intResultPrice=0;
    intResultPrice2=0;
    intResultPrice3=0;
    gekozenBedrag=0;
}



if(opnemenPanel.isVisible() && serialData.equals("#")){

    if(balance>=gekozenBedrag){

opnemenPanel.setVisible(false);
    f1.validate();
    f1.repaint();
    f1.invalidate();
    f1.getContentPane().add(bonPanel);
    bonPanel.setVisible(true);

   // homeScreenPanel.setVisible(true);
    }else {
        JOptionPane.showMessageDialog(null, "niet genoeg geld");
    }
    /*de waardes weer naar 0 veranderen. */
    num1=0;
    num2=0;
    num3=0;
    result=String.valueOf(num1);
    biljet10Counter.setText(result);
    result2=String.valueOf(num2);
    biljet20Counter.setText(result2);
    result3=String.valueOf(num3);
    biljet50Counter.setText(result3);
    totalCounter.setText("0");

}
/////////////////////////////////////////////////////////////////////////////////////////////////////////

if(bonPanel.isVisible() && serialData.equals("A")){
    balance-=gekozenBedrag;

    String query = ("UPDATE accounts SET Balance=" + balance + " WHERE Pasnummer='"+ gescandePas +"' ");
    Statement st = conn.createStatement(); 
     st.executeUpdate(query);

     LocalDateTime myDateObj = LocalDateTime.now(); 
     DateTimeFormatter myFormatObj = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss"); //DateTimeFormatter gebruikt, omdat LocalDateTime ook de microseconde geeft en dat wil ik niet.
     String formattedDate = myDateObj.format(myFormatObj); 


System.out.println("Pasnummer= ******" + gescandePas.substring(6));
System.out.println("Uw gekozen bedrag= " + gekozenBedrag);
System.out.println("De tijd van uw transactie: " + formattedDate); 

     bonPanel.setVisible(false);
     f1.validate();
    f1.repaint();
    f1.invalidate();
    homeScreenPanel.setVisible(true);
}
if(bonPanel.isVisible() && serialData.equals("B")){
    balance-=gekozenBedrag;

    String query = ("UPDATE accounts SET Balance=" + balance + " WHERE Pasnummer='"+ gescandePas +"' ");
    Statement st = conn.createStatement(); 
     st.executeUpdate(query);

     bonPanel.setVisible(false);
     f1.validate();
    f1.repaint();
    f1.invalidate();
    homeScreenPanel.setVisible(true);
}
if(bonPanel.isVisible() && serialData.equals("C")){
     bonPanel.setVisible(false);
     f1.validate();
    f1.repaint();
    f1.invalidate();
    homeScreenPanel.setVisible(true);
}





//st.close();
}
catch (Exception e){
System.err.println("Got an exception! ");
System.err.println(e.getMessage());
}




			}
		});
 }




}




