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 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 static final String BUTTON_CREATE = "New Object";
	
	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.create(TITLE_ENTITY, controller.getYggdrasil().getRoot(), controller, false);
		editor.jtree_entity = SelectorTree.createYggdrasilSelector(TITLE_ENTITY, controller.getYggdrasil().getRoot(), controller, false);
		editor.jtree_classes = SelectorTree.createClassSelector(TITLE_CLASSES, controller, false);
		
        JPanel rightPanel = new JPanel();
        rightPanel.setLayout( new BoxLayout(rightPanel, BoxLayout.Y_AXIS) );
        rightPanel.add( editor.jtree_entity );      
        rightPanel.add( editor.jtree_classes );
        
        
        
        
//        rightPanel.add( controller.getCommandBar().addHiddenCommand(
//				"Create Object", "createObject(name:%S(name), class:%1, targetX:%x, targetY:%y);", "def.ClassDef", "containers.Container") );
        
        rightPanel.add( controller.getCommandBar().addHiddenCommand(
				"Create Object",
				"world.put(name: 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;
    }
	
	
//	private static JButton createNewObjectButton(final ClientAController controller){
//		JButton button = new JButton(BUTTON_CREATE);
//		
////		button.addActionListener( new ActionListener(){
////
////			@Override
////			public void actionPerformed(ActionEvent e) { 
////				controller.setPrimaryElement( controller.getWorld().get("objects") );
////				Element newElement = controller.getCommander().getCreateObjectCommand().execute();
////				if (newElement != null)
////					controller.setSecondaryElement(newElement);
////			}
////		} );
//		
//		
//		return button;
//	}	


	@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
		
	}
		
}
