/* <copyright>
This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
(c) Copyright 2011 Motorola Mobility, Inc.  All Rights Reserved.
</copyright> */

/**
@requires montage/core/core
@requires montage/ui/component
*/
var Montage = require("montage/core/core").Montage,
    Component = require("montage/ui/component").Component;

exports.BindingView = Montage.create(Component, {
    //private Properties
    _selectedComponent: {
        value: null
    },

    //Move variables
    _translateX : {
        value: 0
    },

    _translateY: {
        value: 0
    },

    translateX : {
        get: function() {
            return this._translateX;
        },
        set: function(val) {
            this._translateX = val;
            console.log("x", this._translateX);
        }
    },

    translateY: {
        get: function() {
            return this._translateY;
        },
        set: function(val) {
            this._translateY = val;
            console.log("y", this._translateY);
        }
    },

    handleMousedown: {
        value: function(e) {
            validateOverHud(e.clientX, e.clientY);
        }
    },

    validateOverHud: {
        value: function() {

        }
    },

    componentsList: {
        value: {}
    },

    _bindables: {
        value: []
    },

    _nonVisualComponents: {
        value:[]
    },

    _bindingViewCanvas: {
        value:null
    },
    _canvas: {
        value:null
    },
    _context : {
        value: null
    },

    //Public Objects
    hudRepeater: { value: null },


    //Public Properties
    selectedComponent: {
        get: function() {
            return this._selectedComponent;
        },
        set: function(val) {
            this._selectedComponent = val;
            if(this._selectedComponent !== null) {
                this.application.ninja.objectsController.currentObject = this.selectedComponent;
                var arrBindings = this.application.ninja.objectsController.currentObjectBindings;
                var arrProperties = this.application.ninja.objectsController.getPropertyList(this.selectedComponent, true);

                //Add the first component which is the selected one to have a hud

                this.componentsList[this.selectedComponent.identifier] = {"component":  this.selectedComponent, "properties": this.application.ninja.objectsController.getPropertyList(this.selectedComponent, true)};
                console.log("components:",this.componentsList);
                //Go through the loop and find every interacted object by bindings
                arrBindings.forEach(function(obj) {
                    if(typeof (this.componentsList[obj.boundObject.identifier]) === "undefined") {
                        var componentListItem = {}
                        componentListItem.component = obj.boundObject;
                        componentListItem.properties = [];
                        this.application.ninja.objectsController.getPropertiesFromObject(obj.boundObject, true).forEach(function(obj) {
                            componentListItem.properties.push({"title":obj})
                        }.bind(this));
                        this.componentsList[obj.boundObject.identifier] = componentListItem;
                    }
                }.bind(this));
                for(var key in this.componentsList){
                    this.bindables.push(this.componentsList[key]);
                }
                console.log(this.bindables);
                // Get Bindings that exist;


                //Get Properties of Elements in bindings;
            }
            this.needsDraw = true;
        }
    },
    bindables: {
        get: function() {
            return this._bindables;
        },
        set: function(val) {
            this._bindables = val;
        }
    },
    nonVisualComponents: {
        get: function() {
            return this._nonVisualComponents;
        },
        set: function(val) {
            this._nonVisualComponents = val;
        }
    },
    bindingViewCanvas: {
        get: function() {
            return this._bindingViewCanvas;
        },
        set: function(val) {
            this._bindingViewCanvas = val;
        }
    },

    //Methods
    canvas: {
        get: function() {
            return this._canvas;
        },
        set: function(val) {
            this._canvas = val;
        }
    },

    //Montage Draw Cycle
    prepareForDraw: {
        value: function() {
            //this._canvas = this.application.ninja.stage.drawingCanvas;
            this._context = this._canvas.getContext('2d');
            this.application.ninja.stage._iframeContainer.addEventListener("scroll", this, false);
        }
    },

    draw: {
        value: function() {
            if(this.selectedComponent !== null) {
                this.canvas.width  = this.application.ninja.stage.drawingCanvas.offsetWidth;
                this.canvas.height = this.application.ninja.stage.drawingCanvas.offsetHeight;
                this.clearCanvas();
                this.drawBlueLine(110,53,210,173);

            } else {
                this.bindables = [];
                this.clearCanvas();
            }

        }
    },

    drawBlueLine: {
        value: function(fromX,fromY,toX,toY) {
            this._context.lineWidth = 4; // Set Line Thickness
            this._context.strokeStyle = "#5e9eff"

            this._context.beginPath(); // Start Drawing Line
            this._context.moveTo(fromX, fromY);
            this._context.lineTo(toX, toY);
            this._context.stroke();
        }
    },

    clearCanvas: {
        value: function() {
            this._context.clearRect(0,0,this._canvas.offsetWidth,this._canvas.offsetHeight);
        }
    },

    handleMousemove: {
        value: function() {

        }
    },

    handleMousedown: {
        value: function(event) {

        }
    },

    handleScroll: {
        value: function() {
            this.needsDraw = true;
        }
    },

    didDraw: {
        value: function() {

        }
    }

});