package hu.alkfejl.bookshop.view;

//Az importokat mindig SHIFT+F8-al huzzuk be eclipse alatt!
import hu.alkfejl.bookshop.common.Labels;
import hu.alkfejl.bookshop.view.dialogs.AddCustomerDialog;
import hu.alkfejl.bookshop.view.dialogs.AddQualifDialog;
import hu.alkfejl.bookshop.view.dialogs.BuyBookDialog;
import hu.alkfejl.bookshop.view.dialogs.RemoveQualifDialog;
import hu.alkfejl.bookshop.view.tablemodels.BookTableModel;
import hu.alkfejl.bookshop.view.tablemodels.CustomerTableModel;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTable;


/**
 * @author Fulop Lajos
 * @leiras A Menu osztály reprezentálja a menüt 
 * 		   Azért teheti ezt meg, mert a JMenuBar osztályból származik.
 *   	   Így a menure a this objektummal hivatkozhatunk 
 */
public class BookShopMenuBar extends JMenuBar implements ActionListener {

    // A JMenuBar implementálja a Serializable interfészt, emiatt kell a serialVersionUID
	// Ez máshol is előfordulhat
	// Az osztály mellett bal oldalt sárga felkiáltójel eclipse-ben, ráklikkelve Add generated serial version id
	// Kiprobalhatjuk, ha ezt a sort toroljuk
	private static final long serialVersionUID = 2973555574160940115L;
	private BookShopGUI gui;

	public BookShopMenuBar(BookShopGUI gui){
        super();
        this.gui = gui;
        //Három menüpontot gyártunk általánosan, a createMenuPoint metódussal
        createMenuPoint(Labels.customer, Labels.add_customer, Labels.list_customers);
        createMenuPoint(Labels.book, Labels.buy_book, Labels.list_books);
        createMenuPoint(Labels.sell, Labels.sell_book, Labels.list_sold_books);
    }
       
    private void createMenuPoint(String name, String... subnames){
        JMenu menu;
        //Létrehozunk egy menupontot az első paraméter alapján
        menu = new JMenu(name);
        //A menupontot hozzáadjuk a BookShopMenuBar-hoz
        this.add(menu);
        
        //Az egyes menu itemeket a maradék paraméter értékeivel hozzuk létre
        for(String subname : subnames){
        	JMenuItem menuItem = new JMenuItem(subname);
	        menu.add(menuItem);
	        //Minden egyes menu itemet figyelünk
	        //A menu itemek esetén a megfigyelést az ActionListener interfész biztosítja
	        //Ezért a menubar implementálja ezt az interfészt és felülírja az actionPerformed metódust 
	        menuItem.addActionListener(this);
        }
        
        if (name.equals(Labels.customer)) {
        	//kiegeszitjuk a customer menupontot a qualification-ok kezelesevel
            JMenu qualifs = new JMenu(Labels.manage_qualif);
            JMenuItem add_qualif = new JMenuItem(Labels.add_qualif);
            add_qualif.addActionListener(this);
            JMenuItem remove_qualif = new JMenuItem(Labels.remove_qualif);
            remove_qualif.addActionListener(this);
            qualifs.add(add_qualif);
            qualifs.add(remove_qualif);
            menu.add(qualifs);
        }
    }
    
    /* 
     * Az interfészekhez tartozó metódusokat célszerű generálni,
     * azután, hogy megadtuk az implements kulcsó után az interfészt,
     * Jobb klikk + Source + Override/Implement 
     */
	@Override
	public void actionPerformed(ActionEvent arg0) {
		try{
			System.out.println("A következő menüt meghívta a felhasználó:" + arg0.getActionCommand());
			//Ha az új ügyfél felvételét választották, akkor egy AddCustomerDialog-ot indítunk
			if(arg0.getActionCommand().equals(Labels.add_customer))
				new AddCustomerDialog(gui, true);
			if(arg0.getActionCommand().equals(Labels.list_customers)){
				//Csinalunk egy tablazatot, a CustomerTableModel alapjan - ami megkapja a controltol a customereket
				JTable table = new JTable(new CustomerTableModel(gui.getControl().getCustomers()));
				//A tablazatot rarakjuk egy scrollpanere, igy ha az tul nagy lenne az alk. meretehez kepest akkor is gorgetheto lesz
				JScrollPane container = new JScrollPane(table);
				//Ezt a scrollpane-t allitjuk be az alkalmazas ablak tartalmanak
				gui.getWindow().setContentPane(container);
				//Majd megjelenitjuk
				gui.getWindow().setVisible(true);
			}
			if(arg0.getActionCommand().equals(Labels.buy_book)){
				new BuyBookDialog(gui, true);
			}
			if(arg0.getActionCommand().equals(Labels.list_books)){
				JTable table = new JTable(new BookTableModel(gui.getControl().getBooks()));
				JScrollPane container = new JScrollPane(table);
				gui.getWindow().setContentPane(container);
				gui.getWindow().setVisible(true);
			}
			if(arg0.getActionCommand().equals(Labels.add_qualif)) {
				new AddQualifDialog(gui, true);
			}
			if(arg0.getActionCommand().equals(Labels.remove_qualif)) {
				new RemoveQualifDialog(gui, true);
			}
		}catch(SQLException e){
			System.err.println(e);
		}
	}
	
}

