/*
 *  Copyright 2015 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 class controls a ribbon controller that is able to test if test target
 * (which should be a target) is modifiable.
 * @private
 */
Ext.define('Ametys.plugins.web.zone.controller.ModifiableZoneItemController', {
	extend: 'Ametys.web.controller.WebButtonController',

	/**
	 * @cfg {Boolean} [enabled-on-modifiable-only=true] If true the controller will be disabled the selection is not modifiable
	 */
	/**
	 * @cfg {String} modifiable-description-no The description text used for tooltip when the selection is not modifiable
	 */
	
	areSameTargets: function(target1, target2)
	{
		var match = this.callParent(arguments);
		return match && target1.getParameters()['zoneitem-id'] == target2.getParameters()['zoneitem-id'];
	},
	
	additionalErrorDescriptionOnSelectionChanged: function(targets)
	{
        var additionalErrorDesc = this.callParent(arguments);
        
        if (additionalErrorDesc != null)
        {
            // Parent condition failed
            return additionalErrorDesc;
        }
        
		var enabledOnModifiableOnly = String(this.getInitialConfig("enabled-on-modifiable-only") || 'true') == 'true';
		var target = targets[0];
		
		if (enabledOnModifiableOnly && target.getParameters()['zoneitem-id'] != null)
		{
			var zoneItemId = target.getParameters()['zoneitem-id'];
			var zoneItemTarget = target.getSubtarget(function (target) { return target.getId() == 'zoneitem' && target.getParameters().id == zoneItemId});
			
			if (!zoneItemTarget.getParameters().isModifiable)
			{
				return this.getInitialConfig('modifiable-description-no') || '';
			}
		}
		
		return null;
	}
});