package com.techlabs.puzzle {

    import com.bit101.components.PushButton;
    import com.techlabs.puzzle.events.PuzzleEvent;
    
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.PixelSnapping;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Matrix;

    public class ControlPanel extends Sprite {

        private var _shuffleButton:PushButton;
        private var _flashPuzzle:PushButton;
        private var _flexPuzzle:PushButton;
        private var _preview:Bitmap;

        public function ControlPanel() {
            
            // Buttons
            _shuffleButton = new PushButton(this, 20, 20, "Shuffle", shuffleBoardHandler);
            _flashPuzzle = new PushButton(this, 20, 45, "Flash Puzzle", changeImageHandler);
            _flexPuzzle = new PushButton(this, 20, 70, "Flex Puzzle", changeImageHandler);
        }
        
        // Sets the small preview image
        // It is there only give the user a hint about how
        // the result should look like
        public function setPreview(image:Bitmap):void {
            
            // This is the scale we need to get 100x100px image
            // -> 100px = Originalwidth / scaleFactor;
            // -> scaleFactor = 100px / Originalwidth;
            var scale:Number = 100/image.width;
            
            // Transform matrix for scaling
            var m:Matrix = new Matrix();
            m.scale(scale, scale);
        
            var bmd:BitmapData = new BitmapData(image.width*scale, image.width*scale);
            bmd.draw(image, m);
            _preview = new Bitmap(bmd, PixelSnapping.AUTO, true);
            
            addChild(_preview);

            _preview.x = 20;
            _preview.y = 105;
        }
        
        private function shuffleBoardHandler(e:Event):void {
            dispatchEvent(new PuzzleEvent(PuzzleEvent.SHUFFLE));
        }

        private function changeImageHandler(e:Event):void {
            if (e.target.label == "Flash Puzzle")
                dispatchEvent(new PuzzleEvent(PuzzleEvent.CHANGE_IMAGE, null, "assets/Puzzle_Flash.png"));
            else
                dispatchEvent(new PuzzleEvent(PuzzleEvent.CHANGE_IMAGE, null, "assets/Puzzle_Flex.png"));
        }

    }

}