/*
 * Builder Index controller Menus entity controller
 */
+function ($) { "use strict";

    if ($.oc.builder === undefined)
        $.oc.builder = {}

    if ($.oc.builder.entityControllers === undefined)
        $.oc.builder.entityControllers = {}

    var Base = $.oc.builder.entityControllers.base,
        BaseProto = Base.prototype

    var Menus = function(indexController) {
        Base.call(this, 'menus', indexController)
    }

    Menus.prototype = Object.create(BaseProto)
    Menus.prototype.constructor = Menus

    // PUBLIC METHODS
    // ============================

    Menus.prototype.cmdOpenMenus = function(ev) {
        var currentPlugin = this.getSelectedPlugin()

        if (!currentPlugin) {
            alert('Please select a plugin first')
            return
        }

        this.indexController.openOrLoadMasterTab($(ev.target), 'onMenusOpen', this.makeTabId(currentPlugin))
    }

    Menus.prototype.cmdSaveMenus = function(ev) {
        var $target = $(ev.currentTarget),
            $form = $target.closest('form'),
            $inspectorContainer = $form.find('.inspector-container')

        if (!$.oc.inspector.manager.applyValuesFromContainer($inspectorContainer)) {
            return
        }

        var menus = $.oc.builder.menubuilder.controller.getJson($form.get(0))

        $target.request('onMenusSave', {
            data: {
                menus: menus
            }
        }).done(
            this.proxy(this.saveMenusDone)
        )
    }

    Menus.prototype.cmdAddMainMenuItem = function(ev) {
        $.oc.builder.menubuilder.controller.addMainMenuItem(ev)
    }

    Menus.prototype.cmdAddSideMenuItem = function(ev) {
        $.oc.builder.menubuilder.controller.addSideMenuItem(ev)
    }

    Menus.prototype.cmdDeleteMenuItem = function(ev) {
        $.oc.builder.menubuilder.controller.deleteMenuItem(ev)
    }

    // INTERNAL METHODS
    // ============================

    Menus.prototype.saveMenusDone = function(data) {
        if (data['builderResponseData'] === undefined) {
            throw new Error('Invalid response data');
        }

        var $masterTabPane = this.getMasterTabsActivePane();

        if ($.oc.mainMenu && data.mainMenu && data.mainMenuLeft) {
            $.oc.mainMenu.reload(data.mainMenu, data.mainMenuLeft);
        }

        this.getIndexController().unchangeTab($masterTabPane);
    }

    // REGISTRATION
    // ============================

    $.oc.builder.entityControllers.menus = Menus;

}(window.jQuery);