package surface;

import java.awt.Component;

import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.JSplitPane;

import background.Controller;


/**
 *
 * @author  solusa
 */
public class YggdrasilEditor extends JPanel {
	
    private static final long serialVersionUID = 1L;
    
    private static final String TITLE_YGGDRASIL_LEFT = "Primary selection:";
    private static final String TITLE_YGGDRASIL_RIGHT = "Secondary selection:";    

    private YggdrasilEditor(final Controller controller) {
        
        // Yggdrasil Views:
        SelectorTree jtree_left = SelectorTree.createYggdrasilSelector(TITLE_YGGDRASIL_LEFT, controller.getYggdrasil().getRoot(), controller, true);
        SelectorTree jtree_right = SelectorTree.createYggdrasilSelector(TITLE_YGGDRASIL_RIGHT, controller.getYggdrasil().getRoot(), controller, false);

        // Split Panel:
        JSplitPane jsplit_browser = new JSplitPane();
        jsplit_browser.setAlignmentX(Component.CENTER_ALIGNMENT);
        jsplit_browser.setAlignmentY(Component.CENTER_ALIGNMENT);
        jsplit_browser.setDividerSize(5);
        jsplit_browser.setResizeWeight(0.5);
        jsplit_browser.setLeftComponent(jtree_left);
        jsplit_browser.setRightComponent(jtree_right);
        
        // Browser Panel:
        JPanel browserPanel = new JPanel();
        browserPanel.setLayout(new BoxLayout(browserPanel, BoxLayout.Y_AXIS));
        browserPanel.add(jsplit_browser);        
        
        // Commands:
        CommandBar commandBar = CommandBar.createCommandBar(controller, false);
        JPanel jpanel_right = new JPanel();
        jpanel_right.setLayout( new BoxLayout(jpanel_right, BoxLayout.Y_AXIS) );
        
        jpanel_right.add( commandBar.addHiddenCommand(
                "Rename", "%1.setName( newName:%S(New name) );", "basics.YObject", null));
        jpanel_right.add( commandBar.addHiddenCommand(
                "Instantiate", "%2.put( obj:%1.new(name:%S(name)) );", "def.ClassDef", "containers.Container"));
        jpanel_right.add( commandBar.addHiddenCommand(
                "Remove", "%1.remove();", "basics.YObject", null));
//        jpanel_right.add( commandBar.addHiddenCommand(
//                "Copy", Reference.ROOT_SYMBOL + ".classes.def.ComplexClassDef.new(name:%S(name));", "def.PackageDef", null));
        jpanel_right.add( commandBar.addHiddenCommand(
                "Create reference",
                "{}" +
                ""
                , "def.PackageDef", null));
        
        
        // Main Split:
        JSplitPane jsplit_main = new JSplitPane();
        jsplit_main.setAlignmentX(Component.CENTER_ALIGNMENT);
        jsplit_main.setAlignmentY(Component.CENTER_ALIGNMENT);
        jsplit_main.setDividerSize(5);
        jsplit_main.setResizeWeight(0.9);
        jsplit_main.setLeftComponent(jsplit_browser);
        jsplit_main.setRightComponent(jpanel_right);
        add(jsplit_main);
        
    }
    
    public static YggdrasilEditor createYggdrasilEditor(final Controller controller){
        YggdrasilEditor yggdrasilEditor = new YggdrasilEditor(controller);
        yggdrasilEditor.setLayout(new BoxLayout(yggdrasilEditor, BoxLayout.X_AXIS));
        return yggdrasilEditor;
    }
    
    
}
