/**
  * @param LimitHexQualityInterface $limitHexQualityData
  *
  * @return array
  */
 protected function searchForImagesByHash(LimitHexQualityInterface $limitHexQualityData)
 {
     $rgb = $this->hex2rgb($limitHexQualityData->getHex());
     $images = array();
     $getLimit = $limitHexQualityData->getLimit() * 3;
     $fetchAll = function ($getLimit, &$fetchedImages = null) use(&$fetchAll) {
         if (is_null($fetchedImages)) {
             $images = $this->fetch($getLimit);
         } else {
             $images = $this->instagramWrapper->pagination($fetchedImages, $getLimit);
         }
         if (!is_null($images) || !empty($images) && !empty($images->meta) && $images->meta->code == '200') {
             if (is_null($fetchedImages)) {
                 $fetchedImages = $images;
             } else {
                 $fetchedImages->pagination = $images->pagination;
                 $fetchedImages->data = array_merge($fetchedImages->data, $images->data);
             }
         } else {
             return $fetchedImages;
         }
         if (count($fetchedImages->data) < $getLimit && !empty($images->pagination)) {
             return $fetchAll($getLimit, $fetchedImages);
         }
         return $fetchedImages;
     };
     $quality = $limitHexQualityData->getQuality();
     $count = 0;
     $rec = function ($limit, $rgb, $fetchedImages) use(&$rec, &$images, $quality, &$count, $fetchAll, $getLimit) {
         if (is_object($fetchedImages) && !empty($fetchedImages->data) && is_array($fetchedImages->data)) {
             $sorted = [];
             foreach ($fetchedImages->data as $item) {
                 $count++;
                 $diff = $this->colorDiff($rgb, ColorThief::getColor($item->images->thumbnail->url, 1));
                 if ($item->type != 'image' || $diff >= 300 + ceil($count / 10) * 100) {
                     continue;
                 }
                 $sorted[] = ['i' => $item->images->{$quality}, 'diff' => $diff];
             }
             usort($sorted, function ($a, $b) {
                 if ($a['diff'] == $b['diff']) {
                     return 0;
                 }
                 return $a['diff'] < $b['diff'] ? -1 : 1;
             });
             foreach ($sorted as $item) {
                 if (count($images) >= $limit) {
                     return null;
                 }
                 $images[] = $item;
             }
             $count = 0;
             unset($fetchedImages->data);
             return $rec($limit, $rgb, $fetchAll($getLimit, $fetchedImages));
         }
         return null;
     };
     $rec($limitHexQualityData->getLimit(), $rgb, $fetchAll($getLimit));
     usort($images, function ($a, $b) {
         if ($a['diff'] == $b['diff']) {
             return 0;
         }
         return $a['diff'] < $b['diff'] ? -1 : 1;
     });
     return array_map(function ($item) {
         return $item['i'];
     }, $images);
 }