package diploma;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.io.*;


class StergeInregistrari extends JFrame implements ActionListener {
	EditManualPanel editManualPanel;
	StringBuffer deleteString = new StringBuffer(""), deleteHtmlString = new 
		StringBuffer("");
	WherePanel wherePanel;
	InterfataGrafica interfataGrafica;
	String nmTabString;
	private JButton deleteButton, inchidButton;
	
	public StergeInregistrari(InterfataGrafica interfataGrafica) {
		super("Șterge înregistrări din tabel după criterii");
		this.interfataGrafica = interfataGrafica;
		editManualPanel = new EditManualPanel();
		editManualPanel.editManButton.addActionListener(this);
		wherePanel = new WherePanel(this, true);
		nmTabString = (String) interfataGrafica.intGrafList.getSelectedValue();

		//Creează panelul cu butoanele finale ale tabelului
		JPanel butonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 50, 10));
		deleteButton = new JButton("Execută DELETE");
		deleteButton.setMnemonic(KeyEvent.VK_D);
		deleteButton.addActionListener(this);
		inchidButton = new JButton("Închidere");
		inchidButton.setMnemonic(KeyEvent.VK_N);
		inchidButton.addActionListener(this);
		butonPanel.add(inchidButton);
		butonPanel.add(deleteButton);
		//Panelul ce cuprinde tot
		JPanel reuniunePanel = new JPanel();
		reuniunePanel.setOpaque(true);
		reuniunePanel.setLayout(new BoxLayout(reuniunePanel, BoxLayout.Y_AXIS));
		reuniunePanel.add(editManualPanel);
		reuniunePanel.add(Box.createVerticalStrut(20));
		reuniunePanel.add(wherePanel);
		reuniunePanel.add(Box.createVerticalStrut(20));
		reuniunePanel.add(butonPanel);
		reuniunePanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); 
		setContentPane(reuniunePanel);
//umplem Nume câmp din tabelul where cu cp. din tabelul respectiv		
		ObjectInputStream objInStr = null;
		try {
			objInStr = new ObjectInputStream(
				new FileInputStream(interfataGrafica.numeBdString + 
				"\\" + nmTabString + ".txt"));
		}
		catch (FileNotFoundException fileExc) {fileExc.getMessage();}
		catch (IOException ioExc) {ioExc.getMessage();}
		TabelMysqlObj tabObj = null;
		try {
			tabObj = (TabelMysqlObj)objInStr.readObject();
			if (objInStr != null) objInStr.close();
		}
		catch (ClassNotFoundException classExc) {
			classExc.getMessage();
		}
		catch(IOException except) {except.getMessage();}
		if (tabObj == null) return;
//adăugăm toate cp. tabelului în lista de câmpuri din tabelul where :
		java.util.Hashtable<String, Atribute> arrCpAtribHash = 
			tabObj.getArrayCpAtribHash();
		for (Atribute atr : arrCpAtribHash.values()) {
			String nmCp = atr.getProperty("numeCamp");
			wherePanel.numeCpCBoxModel.insertElementAt(
				nmTabString + "." + nmCp, 0);
			wherePanel.cpHash.put(nmTabString + "." + nmCp,
				atr.getProperty("tipCamp") + 
				((atr.getProperty("lungCamp").equals("no")) ?
				"" : "(" + atr.getProperty("lungCamp") + ")"));
	
		}		
	}
	
	public void formareComanda() {
		deleteString = new StringBuffer("DELETE FROM ");
		deleteString.append(nmTabString + " ").append(wherePanel.whereString);
		deleteHtmlString = new StringBuffer("DELETE FROM ");
		deleteHtmlString = deleteHtmlString.append("<font color=\"red\">" + 
			nmTabString + "</font> ").append(wherePanel.whereHtmlString);
		editManualPanel.comandaEditorPane.setText(deleteHtmlString.toString());
	}
	
	public void actionPerformed(ActionEvent e) {
		JButton src = (JButton) e.getSource();
		if (src == inchidButton)
			dispose();
		else if (src == editManualPanel.editManButton) {
			Toolkit.getDefaultToolkit().beep();
			int answ = JOptionPane.showConfirmDialog(this, 
				"Dacă decideți să editați comanda MYSQL, pierdeți suportul" +
				" oferit de interfața grafică.\nEditați comanda?", "Întrebare",
				JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
			if (answ == JOptionPane.YES_OPTION) {
				JComponent[] compArray = {editManualPanel.editManButton, 
				wherePanel.criteriiTable, wherePanel.exprAritmLabel, 
				wherePanel.exprAritmTxFld, wherePanel.validButton};
				for (JComponent compon : compArray) 
					compon.setEnabled(false);
				formareComanda();
				editManualPanel.comandaEditorPane.setEditable(true);
				editManualPanel.comandaEditorPane.setContentType("text/plain");
				editManualPanel.comandaEditorPane.setText(deleteString.toString());
				editManualPanel.comandaEditorPane.requestFocusInWindow();
				
			}
		}
		else {
			String nmTab = (String)
				interfataGrafica.intGrafList.getSelectedValue();
			wherePanel.validButton.doClick();
			if (wherePanel.eroareSintaxa)
				return;
			try {
				Statement s_ment = interfataGrafica.conex.createStatement();
				s_ment.executeUpdate("DELETE FROM " + nmTab + " " +
					wherePanel.whereString.toString());
				dispose();
			}
			catch (SQLException exc) {
				JOptionPane.showMessageDialog(null, "Nu s-a putut executa "
			 	+ " comanda MySQL DELETE FROM ... WHERE\n" + exc.getMessage(),
				"Atenție ! Eroare !", JOptionPane.ERROR_MESSAGE);
				return;
			}
		}
	}
}