'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 Cognos Products: Dashboard
 *| (C) Copyright IBM Corp. 2018, 2020
 *|
 *| US Government Users Restricted Rights - Use, duplication or disclosure
 *| restricted by GSA ADP Schedule Contract with IBM Corp.
 *+------------------------------------------------------------------------+
 */
define(['../../../visualizations/recommender/VisRecommenderBindingFallback'], function (VisRecommenderBindingFallback) {
	'use strict';

	return function () {
		function VisRecommenderDelegator(options) {
			_classCallCheck(this, VisRecommenderDelegator);

			this.logger = options.logger;
			this.visDefinitions = options.visDefinitions;
		}

		VisRecommenderDelegator.prototype.destroy = function destroy() {
			this.logger = null;
		};

		VisRecommenderDelegator.prototype.recommendBindingsForNewColumns = function recommendBindingsForNewColumns(visualization, columnIds) {
			var bindingRecommender = new VisRecommenderBindingFallback(visualization);
			var recommendation = {
				slots: {},
				unbound: columnIds,
				visId: visualization.getDefinition().getId()
			};

			visualization.getSlots().getMappingInfoList().forEach(function (mapping) {
				var cols = recommendation.slots[mapping.slot.getId()];
				if (!cols) {
					cols = [];
					recommendation.slots[mapping.slot.getId()] = cols;
				}
				cols.push(mapping.dataItem.getColumnId());
			});

			bindingRecommender.assignUnboundColumns(recommendation, visualization.getDefinition().getSlotList());
			return Promise.resolve(recommendation);
		};

		VisRecommenderDelegator.prototype._getValidSlotList = function _getValidSlotList(newDefinition) {
			return newDefinition.getSlotList().filter(function (slotDef) {
				return !slotDef.isHidden();
			});
		};

		VisRecommenderDelegator.prototype.recommendBindingsForSelectedViz = function recommendBindingsForSelectedViz(visualization, visId) {
			var newDefinition = this.visDefinitions.getById(visId);
			var bindingRecommender = new VisRecommenderBindingFallback(visualization);
			var recommendation = {
				slots: {},
				unbound: visualization.getSlots().getDataItemList().map(function (dataItem) {
					return dataItem.getColumnId();
				}),
				visId: newDefinition.getId()
			};
			bindingRecommender.assignUnboundColumns(recommendation, this._getValidSlotList(newDefinition));
			return Promise.resolve(recommendation);
		};

		VisRecommenderDelegator.prototype.recommendBestAlternateVisualization = function recommendBestAlternateVisualization(visualization) {
			var mappings = visualization.getSlots().getDataItemList().map(function (dataItem) {
				return dataItem.getColumnId();
			});
			return this.recommendAlternateVisualizations(mappings).then(function (arr) {
				return arr[0];
			});
		};

		VisRecommenderDelegator.prototype.recommendAlternateVisualizations = function recommendAlternateVisualizations(columnIds) {
			var gridDefinition = this.visDefinitions.getByType('List');
			var recommendation = {
				slots: {},
				visId: gridDefinition.getId()
			};
			var mappings = columnIds;
			recommendation.slots[gridDefinition.getSlotList()[0].getId()] = mappings;
			return Promise.resolve([recommendation]);
		};

		VisRecommenderDelegator.prototype.recommendRelatedVisualizations = function recommendRelatedVisualizations() {
			return Promise.resolve([]);
		};

		VisRecommenderDelegator.prototype.recommendCompareVisualizations = function recommendCompareVisualizations() {
			return Promise.resolve([]);
		};

		VisRecommenderDelegator.prototype.recommendVisualizations = function recommendVisualizations() {
			return Promise.resolve([]);
		};

		return VisRecommenderDelegator;
	}();
});
//# sourceMappingURL=FallbackRecommender.js.map