import nl.idgis.giclient.gis.Feature;
import nl.idgis.giclient.event.StateEventListener;
import nl.idgis.giclient.event.StateEvent;
import nl.idgis.giclient.gui.mapviewer.GeometryLayer;
import nl.idgis.giclient.geoma.Point;
import nl.idgis.giclient.util.Pixel;
import nl.idgis.giclient.gui.mapviewer.MapGeometry;
import nl.idgis.giclient.gis.ZoomListener;
import nl.idgis.giclient.gis.GIS;

/**
 * @author copierrj
 */
class nl.idgis.giclient.gui.mapviewer.MapIcon extends MovieClip implements StateEventListener, ZoomListener {
	private var feature:Feature;
	private var geometryLayer:GeometryLayer;
	private var gism:GIS = null;
	private var mapGeometry:MapGeometry;
	private var url:String = null;
	
	private var lastIconCount:Number;	
	
	function onLoad() {
		feature.addEventListener(this, "Feature", StateEvent.CHANGE, "iconUrl");
		gism.gisEventDispatcher.addZoomListener(this);
						
		url = feature.getIconUrl();
		draw();
	}
	
	private function positionIcons():Void {
		//TODO: support for multiple geometries
		
		var centerPoint:Point = mapGeometry.getGeometry().getCenterPoint();	
		var centerPixel:Pixel = this.geometryLayer.getMapViewer().point2Pixel(
		centerPoint.getX(), centerPoint.getY());
		this["icons"]["icon" + 0]._x = centerPixel.getX() - this["icons"]["icon" + 0]._width / 2;
		this["icons"]["icon" + 0]._y = centerPixel.getY() - this["icons"]["icon" + 0]._height / 2;				
	}
	
	function draw():Void {
		if(this["icons"]) {
			MovieClip(this["icons"]).removeMovieClip();
		}
		if(url != null) {
			var handler:Object = new Object();
			handler.feature = feature;
			handler.mapIcon = this;
			handler.onLoadInit = function(target_mc:MovieClip) {			
				this.mapIcon.positionIcons();
			};
			
			var icons:MovieClip = createEmptyMovieClip("icons", getNextHighestDepth());
			var first:MovieClip = icons.createEmptyMovieClip("icon0", icons.getNextHighestDepth());
			lastIconCount = 1;
			var clipLoader:MovieClipLoader = new MovieClipLoader();
			clipLoader.addListener(handler);
			clipLoader.loadClip(url, first);							
		}
	}	
	
	function onStateEvent(stateEvent : StateEvent) : Void {
		url = feature.getIconUrl();
		draw();
	}
	
	function onZoom() : Void {
		this.positionIcons();
	}
	
	function onChangeGeometry():Void {
		this.positionIcons();
    }
}