package application;

import application.actions.*;
import application.editor.Editor;

import javax.swing.*;

public class ApplicationMenuBar extends JMenuBar {
    private static final long serialVersionUID = 4811536194182272888L;

    private ApplicationWindow applicationWindow = null;

    private NewResourceAction newResourceAction = null;
    private NewChannelAction newChannelAction = null;
    private NewIOChannelAction newIOChannelAction = null;
    private NewFormulaChannelAction newFormulaChannelAction = null;
    private DeleteAction deleteAction = null;
    private JavaPrototypeGenerateAction javaPrototypeGenerateAction = null;
    private JerseyPrototypeGenerateAction jerseyPrototypeGenerateAction = null;
    private DAGLayoutAction dagLayoutAction = null;
    private TreeLayoutAction treeLayoutAction = null;
    private CircleLayoutAction circleLayoutAction = null;
    private ShowNavigationAction showNavigationAction;
    //private SimulateAction simulateAction = null;


    public ApplicationMenuBar(ApplicationWindow applicationWindow) {
        this.applicationWindow = applicationWindow;
        JMenu newMenu = new JMenu("New");

        newMenu.add(new NewModelAction(applicationWindow));

        newMenu.add(newResourceAction = new NewResourceAction(applicationWindow.getEditor()));
        newMenu.add(newChannelAction = new NewChannelAction(applicationWindow.getEditor()));
        newMenu.add(newIOChannelAction = new NewIOChannelAction(applicationWindow.getEditor()));
        newMenu.add(newFormulaChannelAction = new NewFormulaChannelAction(applicationWindow.getEditor()));

        JMenu menu = null;
        menu = add(new JMenu("File"));
        menu.add(newMenu);
        menu.add(new OpenAction(applicationWindow));
        menu.addSeparator();
        menu.add(new SaveAction(applicationWindow));
        menu.add(new SaveAsAction(applicationWindow));
        menu.addSeparator();
        menu.add(new ExitAction());

        menu = add(new JMenu("Edit"));
        menu.add(deleteAction = new DeleteAction(applicationWindow.getEditor()));


        menu = add(new JMenu("Layout"));
        menu.add(dagLayoutAction = new DAGLayoutAction(applicationWindow.getEditor()));
        menu.add(treeLayoutAction = new TreeLayoutAction(applicationWindow.getEditor()));
        menu.add(circleLayoutAction = new CircleLayoutAction(applicationWindow.getEditor()));

        menu = add(new JMenu("View"));
        menu.add(new ZoomInAction(applicationWindow.getGraphComponent()));
        menu.add(new ZoomOutAction(applicationWindow.getGraphComponent()));

        menu = add(new JMenu("Simulate"));
        menu.add(new SimulateAction(applicationWindow));

        menu = add(new JMenu("Generate"));
        menu.add(javaPrototypeGenerateAction = new JavaPrototypeGenerateAction(applicationWindow.getEditor()));
        menu.add(jerseyPrototypeGenerateAction = new JerseyPrototypeGenerateAction(applicationWindow.getEditor()));

        menu = add(new JMenu("Window"));
        menu.add(showNavigationAction = new ShowNavigationAction(applicationWindow));
    }

    public Editor getEditor() {
        return applicationWindow.getEditor();
    }

    public void setEditor(Editor editor) {
        newResourceAction.setEditor(editor);
        newChannelAction.setEditor(editor);
        newIOChannelAction.setEditor(editor);
        deleteAction.setEditor(editor);
        javaPrototypeGenerateAction.setEditor(editor);
        jerseyPrototypeGenerateAction.setEditor(editor);
        treeLayoutAction.setEditor(editor);
        circleLayoutAction.setEditor(editor);
    }
}
