'use strict';

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

/**
 * Licensed Materials - Property of IBM
 * IBM Business Analytics (C) Copyright IBM Corp. 2019
 * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
 */

/**
 * @class KpiPropertyCallbacks
 * @hideconstructor
 * @classdesc This class provides APIs for dashboard avtivity state
 */
define(['underscore', 'jquery', '../../../widgets/livewidget/nls/StringResources'], function (_, $, StringResources) {
	var BASE_SLOT_ID = 'actual';
	var TARGET_SLOT_ID = 'goal';
	/**
  * this class is used in VisPropertyProvider.
  */

	var KpiPropertyCallbacks = function () {
		function KpiPropertyCallbacks() {
			_classCallCheck(this, KpiPropertyCallbacks);
		}

		KpiPropertyCallbacks.prototype.getAPI = function getAPI() {
			// we have to return implementation here. 
			return this;
		};

		KpiPropertyCallbacks.prototype._isSlotMapped = function _isSlotMapped(slot) {
			var dataItems = slot && slot.getDataItemList() || [];
			return dataItems.length > 0;
		};

		KpiPropertyCallbacks.prototype._getDataItem = function _getDataItem(slot) {
			var dataItemIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;

			return slot.getDataItemList()[dataItemIndex];
		};

		KpiPropertyCallbacks.prototype.preRenderBaseLabelProperty = function preRenderBaseLabelProperty(_content) {
			var updatedSettings = {};
			var baseSlot = _content.getFeature('Visualization').getSlots().getSlot(BASE_SLOT_ID);
			if (this._isSlotMapped(baseSlot)) {
				var dataItem = this._getDataItem(baseSlot);
				updatedSettings.placeHolderText = _.escape(dataItem.getLabel());
			} else {
				updatedSettings.placeHolderText = '';
			}

			return updatedSettings;
		};

		KpiPropertyCallbacks.prototype.preRenderTargetLabelProperty = function preRenderTargetLabelProperty(_content) {
			var updatedSettings = {};
			var targetSlot = _content.getFeature('Visualization').getSlots().getSlot(TARGET_SLOT_ID);
			if (this._isSlotMapped(targetSlot)) {
				var dataItem = this._getDataItem(targetSlot);
				updatedSettings.placeHolderText = _.escape(dataItem.getLabel());
			} else {
				updatedSettings.placeHolderText = _.escape(StringResources.get('kpiDefaultTargetLabel'));
			}

			return updatedSettings;
		};

		KpiPropertyCallbacks.prototype._getFormatForSlot = function _getFormatForSlot(visualization, slot) {
			var dataItem = this._getDataItem(slot);
			var format = dataItem && dataItem.getFormat();
			return format || {};
		};

		KpiPropertyCallbacks.prototype.preRenderTargetValueProperty = function preRenderTargetValueProperty(_content) {
			var updatedSettings = {};
			var visualization = _content.getFeature('Visualization.internal');
			var targetSlot = visualization.getSlots().getSlot(TARGET_SLOT_ID);
			var baseSlot = visualization.getSlots().getSlot(BASE_SLOT_ID);

			if (this._isSlotMapped(targetSlot)) {
				updatedSettings.readOnly = true;
				updatedSettings.disabled = true;
				updatedSettings.placeHolderText = _.escape(StringResources.get('kpiManualTargetSlotFilled'));
				updatedSettings.value = '';
			} else if (baseSlot) {
				// If we have decimal places in the format, allow the user to enter that many decimal places in the target.
				var formatSpec = this._getFormatForSlot(visualization, baseSlot);
				var decimalPlaces = Math.max(formatSpec.maximumFractionDigits || 0, formatSpec.minimumFractionDigits || 0);
				if (decimalPlaces) {
					updatedSettings.decimalPlaces = decimalPlaces;
				}
			}

			return updatedSettings;
		};

		KpiPropertyCallbacks.prototype.preRenderValueSizeProperty = function preRenderValueSizeProperty(_content, property) {
			var update = {
				options: property.options,
				removeProperty: true //if we remove 'removeProperty' here, we should reimplement onChangeValueSizeProperty()
			};

			if (update.options[0].value === 'auto') {
				update.options[0].label = StringResources.get('kpiAutoValueSize');
			}

			return update;
		};

		KpiPropertyCallbacks.prototype.onChangeValueSizeProperty = function onChangeValueSizeProperty(_content, propertyName, propertyValue) {
			void propertyName;
			void propertyValue;
			/**
    * The property is not using now since we set "removeProperty:true".
    * [todo] if we want to re-enable the property, we should directly use widgetModel.properties...
    * There is an example in VisPropertyPropvider.
    */
			/*
   let props = {};
   if (propertyValue === 'auto') {
   	props['baseValueSize'] = 'auto';
   	props['targetValueSize'] = 'auto';
   } else {
   	props['baseValueSize'] = _content.getPropertyValue('baseValueSize');
   	props['targetValueSize'] = _content.getPropertyValue('targetValueSize');
   	if (props['baseValueSize'] === 'auto') {
   		props['baseValueSize'] = '32';
   		props['targetValueSize'] = '16';
   	}
   	props[propertyName] = propertyValue;
   }
   const transactionId = _.uniqueId('kpi_font_size');
   const ownerWidget = _content.getFeature('livewidget.internal').getWidget();
   for (let property in props) {
   	ownerWidget.onPropertyUpdate({
   		'category': property,
   		'item': props[property],
   		'transactionId': transactionId
   	});
   }*/
		};

		KpiPropertyCallbacks.prototype.validateTargetValueProperty = function validateTargetValueProperty(_content, value) {
			var valid = $.isNumeric(value) || !value;
			return {
				isValid: valid,
				message: StringResources.get('kpiNonNumericTarget')
			};
		};

		return KpiPropertyCallbacks;
	}();

	return KpiPropertyCallbacks;
});
//# sourceMappingURL=KpiPropertyCallbacks.js.map