/*
 *  Copyright 2017 Anyware Services
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
/**
 * This button allows to create a content and reference-it or create it as sub-content of the selected content (on a given metadata).
 * The catalog of the current selected content is set as additional workflow parameters.
 */
Ext.define('Ametys.plugins.odf.content.controller.AddODFContentToCurrentSelectionButtonController', {
    extend: "Ametys.plugins.contentstree.AddContentToCurrentSelectionButtonController",
   
    /**
     * @property {String} _currentCatalogName The name of catalog of the current selected content. 
     */
     
    act: function(result, args, contentId, messageType)
    {
        // Get the catalog and orgunits of the current content
        Ametys.data.ServerComm.callMethod({
            role: "org.ametys.odf.ODFHelper",
            methodName: "getProgramItemInfo",
            parameters: [contentId, args.contentPathIds],
            callback: {
                handler: this._getContentInfoCb,
                scope: this,
                arguments: [result, args, contentId, messageType]
            },
            waitMessage: false
        });
    },
    
    /**
     * @private
     * Callback function invoked after retrieving the current catalog and orgunits.
     * Retains the current catalog to set it as additional workflow parameters later.
     * @param {String} catalogName The catalog name
     * @param {Object[]} args The arguments received on #act and that will be transmitted to parent act method
     */
    _getContentInfoCb: function(info, args)
    {
        var catalogName = info.catalog;
        var orgUnits = info.orgUnits;
        
        this._currentCatalogName = catalogName;
        
        args = Ext.Array.push(args, {'catalog': catalogName}); // Force catalog value in creation metadata set if exists
        args = Ext.Array.push(args, null); // for force mode
        args = Ext.Array.push(args, {'orgUnit': orgUnits}); // Init orgunit value in creation metadata set if exists

        Ametys.plugins.contentstree.AddContentToCurrentSelectionButtonController.prototype.act.apply(this, args);
    },
    
    /**
     * Add the current catalog if not null to the additional workflow parameters
     * @param {String} contentId The currently selected content identifier
     * @param {String} messageType The bus message type (such as 'content')
     * @return {Object} the additional workflow parameters
     */
    _getAdditionalWorkflowParameters: function(contentId, messageType)
    {
        var params = this.callParent() || {};
        params['org.ametys.odf.workflow.AbstractCreateODFContentFunction$catalog'] = this._currentCatalogName;
        return params;
    }
    
});