/**
 * Created by aghassaei on 8/11/15.
 */


define(['jquery', 'underscore', 'menuParent', 'camPlist', 'cam', 'text!assemblerSetupMenuTemplate'],
    function($, _, MenuParentView, camPlist, cam, template){

    return MenuParentView.extend({

        events: {
            "click .editMachineComponent":                          "_editMachineComponent",
            "click .editMachineCode":                               "_editMachineCode",
            "click #newMachineComponent":                           "_newComponent",
            "click #saveMachineConfig":                             "_save"
        },

        _initialize: function(){

        },

        getPropertyOwner: function($target){
            if ($target.hasClass("assembler")) return cam.get("assembler");
            return null;
        },

        _editMachineComponent: function(e){
            e.preventDefault();
            cam.set("editingComponent", $(e.target).data("id"));
            this.model.set("currentNav", "navMachineComponent");
        },

        _editMachineCode: function(e){
            e.preventDefault();
            var codeType = $(e.target).data("name");
            if (!codeType) return;
            var js = cam.get("assembler")[codeType];
            if (js){
                if (codeType == "customFunctionsContext") js = JSON.stringify(js, null, "\t");
                require(['globals'], function(globals){
                    globals.scriptView.showWithJS(js, codeType, function(js){
                        console.log("saved");
                        cam.get("assembler")[codeType] = js;
                    });
                });
            }
        },

        _newComponent: function(e){
            e.preventDefault();
            var id = cam.get("assembler").newComponent();
            cam.set("editingComponent", id);
            this.model.set("currentNav", "navMachineComponent");
        },

        _save: function(e){
            e.preventDefault();
            require(['fileSaver'], function(fileSaver){
                fileSaver.saveMachineConfig(cam.get("assembler").saveJSON());
            });
        },

        _makeTemplateJSON: function(){
            return _.extend(this.model.toJSON(), cam.toJSON(), cam.get("assembler").toJSON(),
                {customFns: {
                    customFunctionsContext: "Context Variables",
                    customCalcPositionOffsets: "Calc Position Offsets",
                    customHeader: "Header",
                    customHome: "Go Home",
                    customMoveXY: "Move XY",
                    customChangeZLayer: "Change Z",
                    customPlacePart: "Place Part",
                    customFooter: "Footer"
                }}
            );
        },

        template: _.template(template)
    });
});