/// <reference path="../recengine/event/IProductEvent.ts" />
/// <reference path="../recengine/context/ProductReference.ts" />
/// <reference path="../recengine/event/ProductViewEvent.ts" />
/// <reference path="../recengine/event/ProductBuyEvent.ts" />
/// <reference path="../recengine/event/ProductAddToCartEvent.ts" />
/// <reference path="../data.ts" />
/// <reference path="DateUtils.ts" />
/// <reference path="Json.ts" />
var econda;
(function (econda) {
    var util;
    (function (util) {
        var ProductAddToCartEvent = econda.recengine.event.ProductAddToCartEvent;
        var ProductBuyEvent = econda.recengine.event.ProductBuyEvent;
        var ProductViewEvent = econda.recengine.event.ProductViewEvent;
        var DateUtils = econda.util.DateUtils;
        /**
         * Helper class for zero gap support.
         * @class econda.util.ZeroGapUtil
         */
        var ZeroGapUtil = (function () {
            function ZeroGapUtil() {
            }
            ZeroGapUtil.appendProfileProperties = function (params, profileProperties) {
                for (var key in profileProperties) {
                    if (profileProperties.hasOwnProperty(key)) {
                        params['p.' + key] = profileProperties[key];
                    }
                }
            };
            ZeroGapUtil.appendHistoryFromProfile = function (params) {
                var history = econda.data.visitor.getHistory();
                params['p.ec:productBasketAddList'] = ZeroGapUtil.convertProductEventListToJsonParamValue(history.getFilteredItems(function (e) { return e instanceof ProductAddToCartEvent; }));
                params['p.ec:productBuyList'] = ZeroGapUtil.convertProductEventListToJsonParamValue(history.getFilteredItems(function (e) { return e instanceof ProductBuyEvent; }));
                params['p.ec:productViewList'] = ZeroGapUtil.convertProductEventListToJsonParamValue(history.getFilteredItems(function (e) { return e instanceof ProductViewEvent; }));
            };
            ZeroGapUtil.convertProductEventListToJsonParamValue = function (productEvents) {
                var resultData = [];
                for (var i = 0; i < productEvents.length; i++) {
                    var productReference;
                    if (productReference = productEvents[i].getProduct()) {
                        if (productReference.getSku() !== null) {
                            resultData.push({
                                t: DateUtils.toUtcIsoString(productEvents[i].getTimestamp()),
                                sku: productReference.getSku()
                            });
                        }
                        else {
                            resultData.push({
                                t: DateUtils.toUtcIsoString(productEvents[i].getTimestamp()),
                                pid: productReference.getId()
                            });
                        }
                    }
                }
                var sortedProductList = resultData.reverse();
                return econda.util.Json.stringify(sortedProductList);
            };
            return ZeroGapUtil;
        }());
        util.ZeroGapUtil = ZeroGapUtil;
    })(util = econda.util || (econda.util = {}));
})(econda || (econda = {}));