/**
  * @param $itemsPerPage
  * @param $currentPage
  * @param $sort
  * @param $currency
  * @param $country
  * @param array $filters
  * @param array $facets
  * @return array
  */
 public function getProducts($itemsPerPage, $currentPage, $sort, $currency, $country, $filters = null, $facets = null)
 {
     $searchRequest = ProductProjectionSearchRequest::of()->sort($sort)->limit($itemsPerPage)->currency($currency)->country($country)->offset(min($itemsPerPage * ($currentPage - 1), 100000));
     if (!is_null($facets)) {
         foreach ($facets as $facet) {
             $searchRequest->addFacet($facet);
         }
     }
     if (!is_null($filters)) {
         foreach ($filters as $type => $typeFilters) {
             foreach ($typeFilters as $filter) {
                 switch ($type) {
                     case 'filter':
                         $searchRequest->addFilter($filter);
                         break;
                     case 'filter.query':
                         $searchRequest->addFilterQuery($filter);
                         break;
                     case 'filter.facets':
                         $searchRequest->addFilterFacets($filter);
                         break;
                 }
             }
         }
     }
     $this->profiler->enter($profile = new Profile('getProducts'));
     $response = $searchRequest->executeWithClient($this->client);
     $this->profiler->leave($profile);
     $products = $searchRequest->mapResponse($response);
     return [$products, $response->getFacets(), $response->getOffset(), $response->getTotal()];
 }
 /**
  * @param $locale
  * @param $itemsPerPage
  * @param $currentPage
  * @param $sort
  * @param $currency
  * @param $country
  * @param $search
  * @param UriInterface $uri
  * @param array $filters
  * @return array
  */
 public function getProducts($locale, $itemsPerPage, $currentPage, $sort, $currency, $country, $search = null, UriInterface $uri, $filters = null)
 {
     $searchRequest = ProductProjectionSearchRequest::of()->sort($sort)->limit($itemsPerPage)->currency($currency)->country($country)->offset(min($itemsPerPage * ($currentPage - 1), 100000));
     if (!is_null($search)) {
         $language = \Locale::getPrimaryLanguage($locale);
         $searchRequest->addParam('text.' . $language, $search);
         $searchRequest->fuzzy(true);
     }
     $selectedValues = $this->searchModel->getSelectedValues($uri);
     $searchRequest = $this->searchModel->addFacets($searchRequest, $selectedValues);
     if (!is_null($filters)) {
         foreach ($filters as $type => $typeFilters) {
             foreach ($typeFilters as $filter) {
                 switch ($type) {
                     case 'filter':
                         $searchRequest->addFilter($filter);
                         break;
                     case 'filter.query':
                         $searchRequest->addFilterQuery($filter);
                         break;
                     case 'filter.facets':
                         $searchRequest->addFilterFacets($filter);
                         break;
                 }
             }
         }
     }
     $response = $searchRequest->executeWithClient($this->getClient());
     $products = $searchRequest->mapFromResponse($response, $this->getMapper($locale));
     return [$products, $response->getFacets(), $response->getOffset(), $response->getTotal()];
 }