# Source: utils/Helpers.js

    import {Circle} from "../objects/Circle.js";
    import {Object2D} from "../Object2D.js";

    /**
     * Class contains helper functions to create editing object tools.
     *
     * @class
     */
    function Helpers(){}

    /**
     * Create a rotation tool helper.
     *
     * When the object is dragged is changes the parent object rotation.
     *
     * @static
     */
    Helpers.rotateTool = function(object)
    {
    	var tool = new Circle();
    	tool.radius = 4;
    	tool.layer = object.layer + 1;
    	tool.onPointerDrag = function(pointer, viewport, delta)
    	{
    		object.rotation += delta.x * 1e-3;
    	};
    	object.add(tool);
    };

    /**
     * Create a box resize helper and attach it to an object to change the size of the object box.
     *
     * Each helper is positioned on one corner of the box, and the value of the corner is copied to the boxes as they are dragged.
     *
     * This method required to object to have a box property.
     *
     * @static
     */
    Helpers.boxResizeTool = function(object)
    {
    	if(object.box === undefined)
    	{
    		console.warn("escher.js: Helpers.boxResizeTool(), object box property missing.");
    		return;
    	}

    	function updateHelpers()
    	{
    		topRight.position.copy(object.box.min);
    		bottomLeft.position.copy(object.box.max);
    		topLeft.position.set(object.box.max.x, object.box.min.y);
    		bottomRight.position.set(object.box.min.x, object.box.max.y);
    	}

    	var topRight = new Circle();
    	topRight.radius = 4;
    	topRight.layer = object.layer + 1;
    	topRight.draggable = true;
    	topRight.onPointerDrag = function(pointer, viewport, delta)
    	{
    		Object2D.prototype.onPointerDrag.call(this, pointer, viewport, delta);

    		object.box.min.copy(topRight.position);
    		updateHelpers();
    	};
    	object.add(topRight);

    	var topLeft = new Circle();
    	topLeft.radius = 4;
    	topLeft.layer = object.layer + 1;
    	topLeft.draggable = true;
    	topLeft.onPointerDrag = function(pointer, viewport, delta)
    	{
    		Object2D.prototype.onPointerDrag.call(this, pointer, viewport, delta);

    		object.box.max.x = topLeft.position.x;
    		object.box.min.y = topLeft.position.y;
    		updateHelpers();
    	};
    	object.add(topLeft);

    	var bottomLeft = new Circle();
    	bottomLeft.radius = 4;
    	bottomLeft.layer = object.layer + 1;
    	bottomLeft.draggable = true;
    	bottomLeft.onPointerDrag = function(pointer, viewport, delta)
    	{
    		Object2D.prototype.onPointerDrag.call(this, pointer, viewport, delta);

    		object.box.max.copy(bottomLeft.position);
    		updateHelpers();
    	};
    	object.add(bottomLeft);

    	var bottomRight = new Circle();
    	bottomRight.radius = 4;
    	bottomRight.layer = object.layer + 1;
    	bottomRight.draggable = true;
    	bottomRight.onPointerDrag = function(pointer, viewport, delta)
    	{
    		Object2D.prototype.onPointerDrag.call(this, pointer, viewport, delta);

    		object.box.min.x = bottomRight.position.x;
    		object.box.max.y = bottomRight.position.y;
    		updateHelpers();
    	};
    	object.add(bottomRight);

    	updateHelpers();
    };

    export {Helpers};