package surface;

import hu.swankey.ammo.common.yggdrasil.basics.ComplexObject;
import hu.swankey.ammo.common.yggdrasil.basics.YObject;
import hu.swankey.ammo.common.yggdrasil.ext.Universe;
import hu.swankey.ammo.common.yggdrasil.ext.World;
import hu.swankey.ammo.common.yggdrasil.ext.FieldObject.FieldObjectClass;

import java.awt.Dimension;

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

import background.Controller;
import client_engine.IClientControllerListener;

public class MapEditor extends JPanel implements IClientControllerListener {
	
	private static final long serialVersionUID = 1L;
	private static final String TITLE_ENTITY = "Entity";
	private static final String TITLE_CLASSES = "Classes";
	
	private SelectorTree jtree_entity;
	private SelectorTree jtree_classes;
	private final Controller controller;
	
	private MapEditor(Controller controller){
		this.controller = controller;
	}

	public static MapEditor create(final Controller controller) {
		MapEditor editor = new MapEditor(controller);
		editor.setLayout( new BoxLayout(editor, BoxLayout.Y_AXIS) );
		
		editor.jtree_entity = SelectorTree.createYggdrasilSelector(TITLE_ENTITY, controller.getYggdrasil().getRoot(), controller, false);
		editor.jtree_classes = SelectorTree.createClassSelector(TITLE_CLASSES, controller, false, FieldObjectClass.singleton());
		
        JPanel rightPanel = new JPanel();
        rightPanel.setLayout( new BoxLayout(rightPanel, BoxLayout.Y_AXIS) );
        rightPanel.add( editor.jtree_entity );      
        rightPanel.add( editor.jtree_classes );
        
        
        CommandBar commandBar = CommandBar.createCommandBar(controller, false);
        
        rightPanel.add( commandBar.addHiddenCommand(
                "Create Object",
                "world.put(obj:%2.new(name:%S(name)), coordx:%x, coordy:%y);",
                "ext.World", "def.ClassDef") );
        
        JSplitPane jsplit_map = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, MapView.create(controller), rightPanel );                
        jsplit_map.setDividerSize(3);
        jsplit_map.setResizeWeight(0.9);
        jsplit_map.setDividerLocation(0.9);
        
        
        
        editor.add(jsplit_map);  
        
        controller.addListener(editor);
        return editor;
    }


	@Override
	public void cursorChanged(Dimension cursor) { }

	@Override
	public void primaryElementChanged(YObject newElement) {	}


	@Override
	public void secondaryElementChanged(YObject element) {
		while (element != null && !ComplexObject.yclass().isTypeOf(element) )
			element = element.getParent();
		
		
		if (jtree_entity.getModel().getRoot() != element)
			jtree_entity.setModel( controller.getYggdrasil().getTreeModel( element ) );
		
	}


	@Override
	public void selectedWorldChanged(World world) {	}

	@Override
	public void selectedUniverseChanged(Universe universe) {
		// TODO Auto-generated method stub
		
	}
		
}
