package {
    
    import com.rubenswieringa.*;
    import com.rubenswieringa.ai.*;
    
    import flash.display.MovieClip;
    import flash.display.Shape;
    import flash.display.StageScaleMode;
    import flash.events.ContextMenuEvent;
    import flash.events.KeyboardEvent;
    import flash.net.URLRequest;
    import flash.net.navigateToURL;
    import flash.ui.ContextMenu;
    import flash.ui.ContextMenuItem;
    import flash.ui.Keyboard;
    
    public class Main extends MovieClip {
        
        private var ecoSystem:EcoSystem;
        private var gridVisualiser:GridVisualiser;
        private var shape:Shape = new Shape();
        
        private const SPAWN_AMOUNT_EACH:int = 4;
        
        public function Main ():void {
            
            this.bootEcoSystem();
            
            this.addChildAt(this.shape, 0);
            this.gridVisualiser = new GridVisualiser(ecoSystem.getGrid(), shape.graphics);
            
            this.stage.addEventListener(KeyboardEvent.KEY_UP, toggleGridVisualiser);
            this.stage.scaleMode = StageScaleMode.NO_SCALE;
            
            this.allowViewSource();
            
        }
        
        private function bootEcoSystem ():void {
            
            this.ecoSystem = new EcoSystem(this);
            this.ecoSystem.limit = 60;
            
            var i:int;
            for (i=0; i<SPAWN_AMOUNT_EACH; i++){
                this.ecoSystem.spawn(RockOrganism);
            }
            for (i=0; i<SPAWN_AMOUNT_EACH; i++){
                this.ecoSystem.spawn(PaperOrganism);
            }
            for (i=0; i<SPAWN_AMOUNT_EACH; i++){
                this.ecoSystem.spawn(ScissorsOrganism);
            }
        }
        
        private function toggleGridVisualiser (event:KeyboardEvent=null):void {
            if (event.keyCode != Keyboard.SPACE){
                return;
            }
            this.gridVisualiser.enabled = !this.gridVisualiser.enabled;
        }
            
        private function allowViewSource ():void {
            var menu:ContextMenu = new ContextMenu();
            var item:ContextMenuItem = new ContextMenuItem("View Source");
            menu.hideBuiltInItems();
            menu.customItems = [item];
            item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, this.viewSource);
            this.contextMenu = menu;
        }
        
        private function viewSource (event:ContextMenuEvent):void {
            navigateToURL(new URLRequest("source/index.html"))
        }
        
    }
    
}