text: 'use strict';
  
  /**
   * Sets the relevant product search model properties, depending on the parameters provided
   *
   * @param {dw.catalog.ProductSearchModel} productSearch - Product search object
   * @param {Object} httpParams - Query params
   * @param {dw.catalog.Category} selectedCategory - Selected category
   * @param {dw.catalog.SortingRule} sortingRule - Product grid sort rule
   * @param {Object} httpParameterMap - Query params
   * @property {Double} [httpParameterMap.pmin] - Minimum Price
   * @property {Double} [httpParameterMap.pmax] - Maximum Price
   */
  function setProductProperties(productSearch, httpParams, selectedCategory, sortingRule, httpParameterMap) {
      var searchPhrase;
  
      if (httpParams.q) {
          searchPhrase = httpParams.q;
          productSearch.setSearchPhrase(searchPhrase);
      }
      if (selectedCategory) {
          productSearch.setCategoryID(selectedCategory.ID);
      }
      if (httpParams.pid) {
          productSearch.setProductIDs([httpParams.pid]);
      }
      if (httpParameterMap) {
          if (httpParameterMap.pmin) {
              productSearch.setPriceMin(httpParameterMap.pmin.doubleValue);
          }
          if (httpParameterMap.pmax) {
              productSearch.setPriceMax(httpParameterMap.pmax.doubleValue);
          }
      }
      if (httpParams.pmid) {
          productSearch.setPromotionID(httpParams.pmid);
      }
  
      if (sortingRule) {
          productSearch.setSortingRule(sortingRule);
      }
  
      productSearch.setRecursiveCategorySearch(true);
  }
  
  /**
   * Updates the search model with the preference refinement values
   *
   * @param {dw.catalog.SearchModel} search - SearchModel instance
   * @param {Object} preferences - Query params map
   */
  function addRefinementValues(search, preferences) {
      Object.keys(preferences).forEach(function (key) {
          search.addRefinementValues(key, preferences[key]);
      });
  }
  
  module.exports = {
      addRefinementValues: addRefinementValues,
      setProductProperties: setProductProperties
  };
  