/*
 *  Copyright 2024 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.
 */

/**
 * Action on the solr query tool
 * @private
 */
Ext.define('Ametys.plugins.cms.solrtool.SolrQueryAction',
{
    singleton: true,
    
    /**
     * Handles the execute solr query button ("play").
     * @param {Ametys.ribbon.element.ui.ButtonController} controller The button controller.
     */
    executeSolrQuery: function(controller)
    {
        var tool = Ametys.tool.ToolsManager.getFocusedTool();
        var query;
        if (tool != null && (query = tool.getQuery()))
        {
            var coreName = tool.getCurrentSolrCoreName();
            
            Ametys.data.ServerComm.callMethod({
                role: controller.getInitialConfig('script-handler'),
                methodName: 'executeSolrQuery',
                parameters: [query, coreName],
                callback: {
                    handler: this._executeSolrQueryCb,
                    scope: this
                },
                waitMessage: "{{i18n PLUGINS_CMS_SOLR_QUERY_TOOL_EXECUTION_WAITING_MESSAGE}}",
                errorMessage: "{{i18n PLUGINS_CMS_SOLR_QUERY_TOOL_EXECUTION_ERROR}}"
            });
        }
    },
    
    /**
     * Callback fired when the query execution has finished: update the result panels.
     * @param {Object} result The query execution result.
     * @param {Array} args The callback arguments.
     * @private
     */
    _executeSolrQueryCb: function(result, args)
    {
        var tool = Ametys.tool.ToolsManager.getFocusedTool();
        if (tool != null)
        {
            tool.updateResult(result);
        }
    },
});