- <?php
- namespace PortalBundle\Controller;
- use CoreBundle\Component\CoreFormFactory;
- use CoreBundle\Component\FormManager;
- use CoreBundle\Entity\Model;
- use CoreBundle\Entity\Vehicles\RecommendGroup;
- use CoreBundle\Model\Vehicles\Repository;
- use CoreBundle\Services\MediaExtensionVidi;
- use DcSiteBundle\Model\Pagination;
- use Doctrine\ORM\EntityManagerInterface;
- use PortalBundle\Model\Catalog;
- use PortalBundle\Model\SeoMetaTag;
- use PortalBundle\Services\CatalogService;
- use PortalBundle\Services\ServiceService;
- use PortalBundle\Services\VehicleFilterService;
- use Symfony\Component\HttpFoundation\JsonResponse;
- use CoreBundle\Entity\Brand;
- use CoreBundle\Entity\Dealer;
- use CoreBundle\Entity\Forms;
- use CoreBundle\Model\Vehicles\Vehicle;
- use CoreBundle\Model\Vehicles\VehicleType;
- use PortalBundle\Enums\CatalogEnum;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\RequestStack;
- use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
- use Symfony\Component\Routing\RouterInterface;
- /**
-  * Class CatalogController
-  * @package PortalBundle\Controller
-  */
- class CatalogController extends BaseController
- {
-     private Catalog $modelCatalog;
-     private Pagination $modelPagination;
-     private CatalogService $catalogService;
-     private MediaExtensionVidi $mediaExtensionVidi;
-     private SeoMetaTag $seoMetaTag;
-     public function __construct(RouterInterface $router, Catalog $modelCatalog, Pagination $modelPagination,
-                                 CatalogService $catalogService, MediaExtensionVidi $mediaExtensionVidi,
-                                 SeoMetaTag $seoMetaTag, CoreFormFactory $coreFormFactory, RequestStack $requestStack,
-                                 Repository $vehicleRepository, ServiceService $serviceService)
-     {
-         parent::__construct($coreFormFactory, $requestStack, $router, $vehicleRepository, $serviceService);
-         $this->modelCatalog = $modelCatalog;
-         $this->modelPagination = $modelPagination;
-         $this->catalogService = $catalogService;
-         $this->mediaExtensionVidi = $mediaExtensionVidi;
-         $this->seoMetaTag = $seoMetaTag;
-     }
-     const PRE_PAGES = 15;
-     const MAX_PAGINATION_BUTTON = 5;
-     // Сторінка для тестування
-     public function catalog(Request $request, EntityManagerInterface $em)
-     {
-         $routeParams = $request->attributes->get('_route_params');
-         $searchParams = $request->query->all();
-         $cookies = $request->cookies->get('compare');
-         $findVehicles = $this->modelCatalog->findByParams($routeParams, $searchParams, self::PRE_PAGES);
-         if(!$findVehicles['data']){
-             $findVehicles = $this->modelCatalog->noFindVehicleByParams($routeParams, $searchParams, self::PRE_PAGES);
-         }
-         $vehicles = $this->modelCatalog->getVehicleByCatalog($this->getUser(), $findVehicles['data'], $routeParams, $cookies);
-         $pagination = $this->modelPagination->initPagination($findVehicles['count'], self::PRE_PAGES, 5);
-         $type = $request->get('type');
-         $state = $request->get('state');
-         $hasCredit = $request->get('credit');
-         $brand = $request->get('brand');
-         if (($brand && $brand === 'all') || ($state && $state === 'all')) {
-             throw new NotFoundHttpException();
-         }
-         $model = $request->get('model');
-         $findModelUrl = (isset($searchParams['m-model'])) ? key($searchParams['m-model']) : $request->get('model');
-         $param = $request->get('param');
-         $valueParam = $request->get('value');
-         $group = $request->get('group');
-         $typeData = VehicleType::getTypeDataByUrl($type);
-         if (!$typeData || $request->get('type') == 'special') {
-             throw new NotFoundHttpException();
-         }
-         $vehicleTypeId = $typeData['id'];
-         $service = $this->catalogService;
-         $filters = $service->getFilters($searchParams, $request->getLocale(), $state, $vehicleTypeId, $brand, $model, $param, $valueParam, $routeParams, $group);
-         if ($request->isXmlHttpRequest()) {
-             return $this->json([
-                 'vehicles' => $service->getAjaxResult($vehicles, $request->getLocale()),
-                 'pagination' => $pagination,
-                 'count' => $findVehicles['count'],
-                 'searchFilters' => $filters,
-                 'hasCredit' => $hasCredit
-             ]);
-         }
- //        if ($findVehicles['count'] === 0) {
- //            throw new NotFoundHttpException();
- //        }
-         $brandEm = $em->getRepository(Brand::class)->getBrandByUrl($brand);
-         if ($findModelUrl) {
-             $modelEm = $em->getRepository(Model::class)->findOneByUrl($findModelUrl, $brandEm);
-         } else {
-             $modelEm = null;
-         }
-         $catalogNav = $this->modelCatalog->getCatalogNav($type, $state, $hasCredit, $brand, $param, $valueParam, $group);
-         if(!$modelEm){
-             $vehicleTopViews = $this->modelCatalog->getVehicleTopViews(5, $brandEm);
-         }else{
-             $vehicleTopViews= $this->modelCatalog->getVehicleItemTopViews(5, $brandEm, $modelEm);
-         }
-         if ($hasCredit && !$brandEm) {
-             $randomTopViews = $this->modelCatalog->getRandomBrand(5);
-         } elseif ($hasCredit) {
-             $randomTopViews = $this->modelCatalog->getRandomModelBrand(999, $brandEm, $modelEm);
-         }
-         $dealers = $em->getRepository(Dealer::class)->getDealerByBrandUrl($brandEm);
-         if (!$brand && ($routeParams['type'] == 'truck' || $routeParams['type'] == 'bus')) {
-             $brandSId = [];
-             foreach ($vehicles as $vehicle) {
-                 $brandSId[] = $vehicle['dealer'];
-             }
-             $dealers = $em->getRepository(Dealer::class)->findBy(['id' => $brandSId]);
-         }
-         $dealers = array_filter($dealers, fn($dealer) => $dealer->getId() !== 39);
-         $seoLinks = $this->seoMetaTag->buildSeoLinks($routeParams, $request->getLocale());
-         $seoLinks = $service->seoYearsLinksFilter($routeParams, $vehicles, $searchParams, $seoLinks);
-         $isUsed = $state == 'used';
-         $catalogCharacteristic = $service->catalogCharacteristic($vehicleTypeId, $isUsed);
-         $OrderCallForm = new Forms();
-         $OrderCallForm = $this->CoreFormFactory()->orderCallForm($OrderCallForm, $brandEm ? $brandEm->getDealer()[0] : null, 1)->createView();
-         return $this->basePortalRender('@Portal/Catalog/index.html.twig', [
-             'vehicles' => $vehicles,
-             'seoLinks' => $seoLinks,
-             'pagination' => $pagination,
-             'filters' => $filters,
-             'catalogNav' => $catalogNav,
-             'baseParams' => $routeParams,
-             'searchParams' => $searchParams,
-             'dealers' => $dealers,
-             'vehicleTopViews' => $vehicleTopViews,
-             'randomTopViews' => $randomTopViews ?? null,
-             'minMaxPrice' => $findVehicles['minMaxPrice'] ?? 0,
-             'minMaxCreditPayment' => $findVehicles['minMaxCreditPayment'] ?? 0,
-             'count' => $findVehicles['count'],
-             'type' => $routeParams['type'],
-             'state' => $routeParams['state'],
-             'group' => $routeParams['group'] ?? null,
-             'hasCredit' => $hasCredit,
-             'brand' => $brand,
-             'brandEm' => $brandEm,
-             'model' => $model,
-             'modelEm' => $modelEm,
-             'param' => $param,
-             'value' => $request->get('value'),
-             'year' => ($param === 1000) ? $param : $valueParam,
-             'seoMeta' => $this->seoMetaTag->buildSeoMeta($request),
-             'valueParam' => $catalogCharacteristic[$param][$valueParam] ?? null,
-             'catalogBanner' => $service->getCatalogBanner($request),
-             'OrderCallForm' => $OrderCallForm ?? '',
-         ]);
-     }
-     /**
-      * @param Request $request
-      * @return JsonResponse
-      */
-     public function buildFilters(Request $request): JsonResponse
-     {
-         $filters = $this->modelCatalog->buildFilters($request->request->all(), $request->getLocale());
-         return $this->json($filters);
-     }
-     /**
-      * @param Request $request
-      * @return JsonResponse
-      */
-     public function getDealersFromSelectedFilter(Request $request, EntityManagerInterface $em): JsonResponse
-     {
-         $data = json_decode($request->getContent(), true);
-         $dealers = [];
-         foreach ($data as $brandUrl => $key) {
-             if ($key) {
-                 $brandEm = $em->getRepository(Brand::class)->getBrandByUrl($brandUrl);
-                 $dealer = $em->getRepository(Dealer::class)->getCarDealer($brandEm);
-                 if (count($dealer) > 1) {
-                     foreach ($dealer as $oneDealer) {
-                         $dealers[] = [
-                             'id' => $oneDealer->getId(),
-                             'name' => $oneDealer->getNameByLocale($request->getLocale()),
-                             'brandName' => $oneDealer->getBrand()->getName(),
-                             'domain' => $oneDealer->getDomain(),
-                             'logo' => $this->mediaExtensionVidi->getPath($oneDealer->getBrand()->getLogo(), 'reference'),
-                             'address' => $oneDealer->getAddressByLocale($request->getLocale()),
-                             'phone' => $oneDealer->getPhone(),
-                             'mapUrl' => 'https://maps.google.com/maps?q=' . $oneDealer->getLat() . ',' . $oneDealer->getLng() . '&hl=' . $request->getLocale(),
-                         ];
-                     }
-                     // Для дилерів з одним брендом
-                 } else {
-                     if ($dealer) {
-                         $dealer = $dealer[0];
-                         $dealers[] = [
-                             'id' => $dealer->getId(),
-                             'name' => $dealer->getNameByLocale($request->getLocale()),
-                             'brandName' => $dealer->getBrand()->getName(),
-                             'domain' => $dealer->getDomain(),
-                             'logo' => $this->mediaExtensionVidi->getPath($dealer->getBrand()->getLogo(), 'reference'),
-                             'address' => $dealer->getAddressByLocale($request->getLocale()),
-                             'phone' => $dealer->getPhone(),
-                             'mapUrl' => 'https://maps.google.com/maps?q=' . $dealer->getLat() . ',' . $dealer->getLng() . '&hl=' . $request->getLocale(),
-                         ];
-                     }
-                 }
-             }
-         }
-         $dealers = array_filter($dealers, fn($dealer) => $dealer['id'] !== 39);
-         return $this->json($dealers);
-     }
-     /**
-      * @param Request $request
-      * @return JsonResponse
-      */
-     public function getDealersFromFilter(Request $request, EntityManagerInterface $em): JsonResponse
-     {
-         $data = json_decode($request->getContent(), true);
-         $dealers = [];
-         foreach ($data as $brand) {
-             $brandEm = $em->getRepository(Brand::class)->getBrandByUrl($brand['url']);
-             $dealer = $em->getRepository(Dealer::class)->getCarDealer($brandEm);
-             // Для дилерів з декількома брендами
-             if (count($dealer) > 1) {
-                 foreach ($dealer as $oneDealer) {
-                     $dealers[] = [
-                         'id' => $oneDealer->getId(),
-                         'name' => $oneDealer->getNameByLocale($request->getLocale()),
-                         'brandName' => $oneDealer->getBrand()->getName(),
-                         'domain' => $oneDealer->getDomain(),
-                         'logo' => $this->mediaExtensionVidi->getPath($oneDealer->getBrand()->getLogo(), 'reference'),
-                         'address' => $oneDealer->getAddressByLocale($request->getLocale()),
-                         'phone' => $oneDealer->getPhone(),
-                         'mapUrl' => 'https://maps.google.com/maps?q=' . $oneDealer->getLat() . ',' . $oneDealer->getLng() . '&hl=' . $request->getLocale(),
-                     ];
-                 }
-                 // Для дилерів з одним брендом
-             } else {
-                 if ($dealer) {
-                     $dealer = $dealer[0];
-                     $dealers[] = [
-                         'id' => $dealer->getId(),
-                         'name' => $dealer->getNameByLocale($request->getLocale()),
-                         'brandName' => $dealer->getBrand()->getName(),
-                         'domain' => $dealer->getDomain(),
-                         'logo' => $this->mediaExtensionVidi->getPath($dealer->getBrand()->getLogo(), 'reference'),
-                         'address' => $dealer->getAddressByLocale($request->getLocale()),
-                         'phone' => $dealer->getPhone(),
-                         'mapUrl' => 'https://maps.google.com/maps?q=' . $dealer->getLat() . ',' . $dealer->getLng() . '&hl=' . $request->getLocale(),
-                     ];
-                 }
-             }
-         }
-         $dealers = array_filter($dealers, fn($dealer) => $dealer['id'] !== 39);
-         return $this->json($dealers);
-     }
-     /**
-      * @param Request $request
-      * @return JsonResponse
-      */
-     public function buildUrl(Request $request)
-     {
-         $params = $request->request->all();
-         $type = $params['type'];
-         $state = $params['state'];
-         $brand = $params['brand'] ?? null;
-         $model = $params['model'] ?? null;
-         $hasCredit = $params['hasCredit'] ?? null;
-         $isAjax = $params['isAjax'] ?? null;
-         if (is_array($brand) && count($brand) == 1) {
-             $brand = array_keys($brand)[0];
-         }
-         if (is_array($model) && count($model) == 1) {
-             $model = array_keys($model)[0];
-         }
-         $baseRouteParams = [
-             'type' => $type,
-             'state' => $state,
-         ];
-         $getParams = [];
-         foreach ($params as $key => $row) {
-             if (!in_array($key, ['type', 'state', 'brand', 'model', 'dynamic', 'hasCredit']) && $row) {
-                 $getParams[$key] = $row;
-             }
-         }
-         if (is_array($brand)) {
-             $getParams['m-brand'] = $brand;
-             $brand = null;
-         } else if ($brand) {
-             $getParams['m-brand'] = [$brand => true];
-         }
-         if (is_array($model)) {
-             $getParams['m-model'] = $model;
-             $model = null;
-         } else if ($model) {
-             $getParams['m-model'] = [$model => true];
-             $model = null;
-         }
-         $dynamic = [];
-         if (isset($params['dynamic'])) {
-             foreach ($params['dynamic'] as $id => $values) {
-                 if (array_key_exists('from', $values) || array_key_exists('to', $values)) {
-                     $dynamic[$id] = $values;
-                 } else {
-                     foreach ($values as $url => $v) {
-                         if ($v != 'false') {
-                             $dynamic[$id][$url] = 1;
-                         }
-                     }
-                 }
-             }
-         }
-         $catalogCharacteristic = array_flip($this->modelCatalog->getCatalogCharacteristicsId());
-         if (!$brand && !$model && (!count($dynamic) || empty(array_intersect_key($dynamic, $catalogCharacteristic)))) {
-             $url = $this->router
-                 ->generate(
-                     ($hasCredit) ? CatalogEnum::ROUTE_PORTAL_CREDIT_CATALOG : CatalogEnum::ROUTE_PORTAL_CATALOG,
-                     array_merge($baseRouteParams, $getParams, ['dynamic' => $dynamic])
-                 );
-             return $this->json(['url' => $url]);
-         }
-         if (!$brand && !$model && count($dynamic)) {
-             $dId = key($dynamic);
-             $value = key($dynamic[$dId]);
-             if (!count($dynamic[$dId])) {
-                 unset($dynamic[$dId]);
-             }
-             $baseRouteParams['param'] = $dId;
-             $baseRouteParams['value'] = $value;
-             $url = $this->router
-                 ->generate(
-                     ($hasCredit) ? CatalogEnum::ROUTE_PORTAL_CREDIT_CATALOG_PARAM : CatalogEnum::ROUTE_PORTAL_CATALOG_PARAM,
-                     array_merge($baseRouteParams, $getParams, ['dynamic' => $dynamic])
-                 );
-             return $this->json(['url' => $url]);
-         }
-         if ($model) {
-             $baseRouteParams['model'] = $model;
-             $baseRouteParams['brand'] = $brand;
-             $url = $this->router
-                 ->generate(
-                     ($hasCredit) ? CatalogEnum::ROUTE_PORTAL_CREDIT_CATALOG_BM_NAME : CatalogEnum::ROUTE_PORTAL_CATALOG_BM_NAME,
-                     array_merge($baseRouteParams, $getParams, ['dynamic' => $dynamic])
-                 );
-             return $this->json(['url' => $url]);
-         }
-         if ($brand) {
-             $baseRouteParams['brand'] = $brand;
-             $url = $this->router
-                 ->generate(
-                     ($hasCredit) ? CatalogEnum::ROUTE_PORTAL_CREDIT_CATALOG_B_NAME : CatalogEnum::ROUTE_PORTAL_CATALOG_B_NAME,
-                     array_merge($baseRouteParams, $getParams, ['dynamic' => $dynamic])
-                 );
-             return $this->json(['url' => $url]);
-         }
-     }
-     public function catalogCategory(Request $request, $url, EntityManagerInterface $em,  \CoreBundle\Factory\Vehicle $vehicleFactory)
-     {
-         $dealers = $em->getRepository(Dealer::class)->getCarDealer();
-         $recommends = $em->getRepository(RecommendGroup::class)->findBy(['state' => 1]);
-         $recommendGroup = $em->getRepository(RecommendGroup::class)->findOneBy(['url' => $url]);
-         $recommendGroupVehicles = $em->getRepository(\CoreBundle\Entity\Vehicles\Vehicle::class)->getVehicleByRecommendGroupUrl(['url' => $url]);
-         $vehicles = $vehicleFactory->createByEntities($recommendGroupVehicles);
-         $sort = $request->get('sort');
-         usort($vehicles, function (Vehicle $a, Vehicle $b) use ($sort) {
-             switch ($sort) {
-                 case 'price-DESC':
-                     return $a->fullPrice() < $b->fullPrice();
-                 default:
-                     return $a->fullPrice() > $b->fullPrice();
-             }
-         });
-         $seoMeta = [];
-         $urn = preg_replace('/^(\/?ua\/|\/?ru\/)/', '/', $request->getRequestUri());
-         $seo = $em->getRepository(\CoreBundle\Entity\SeoMetaTag::class)
-             ->findOneBy(['domain' => $request->getHost(), 'urn' => $urn]);
-         if ($seo && $seo->getState()) {
-             $seoMeta = [
-                 'title' => $seo->getTitle($request->getLocale()),
-                 'description' => $seo->getDescription($request->getLocale()),
-                 'h1' => $seo->getH1($request->getLocale()),
-                 'robots' => $seo->getRobots(),
-             ];
-         }
-         return $this->basePortalRender('@Portal/Car/category.html.twig', [
-             'dealers' => $dealers,
-             'recommends' => $recommends,
-             'recommendGroup' => $recommendGroup,
-             'vehicles' => $vehicles,
-             'url' => $url,
-             'seoMeta' => $seoMeta,
-         ]);
-     }
-     //TODO remove this magic numbers
-     private function createPaginator($data, $page = 1, $limit = 21)
-     {
-         $maxPages = 10;
-         $paginator = [
-             'total' => ceil(count($data) / $limit),
-             'current' => $page,
-         ];
-         if ($paginator['total'] > $maxPages && $page > floor($maxPages / 2)) {
-             $paginator['start'] = $page - floor($maxPages / 2);
-             $paginator['end'] = $paginator['start'] + $maxPages - 1;
-         } else {
-             $paginator['start'] = 1;
-             $paginator['end'] = min($paginator['total'], $maxPages);
-         }
-         return $paginator;
-     }
-     public function getChangeFilter(VehicleFilterService $vehicleFilterService): JsonResponse
-     {
-         return $this->json(['success' => true, 'filter' => $vehicleFilterService->initFilter()]);
-     }
-     public function initVehicleFilterUrl(VehicleFilterService $vehicleFilterService): JsonResponse
-     {
-         return $this->json(['success' => true, 'filterUrl' => $vehicleFilterService->getUrl()]);
-     }
-     public function vehicleColor(): JsonResponse
-     {
-         $vehicleImageColor = $this->modelCatalog->getVehicleImageColor();
-         return $this->json([
-             'success' => true,
-             'image' => $vehicleImageColor,
-         ]);
-     }
-     public function saveCallback(Request $request, EntityManagerInterface $em, FormManager $formManager)
-     {
-         $dealer = $em->getRepository(Dealer::class)->findOneBy(['id' => $request->request->get('call_order')['dealer']]);
-         return $formManager->saveCallbackForm($request, $dealer);
-     }
-     //search
-     /**
-      * @param Request $request
-      * @return JsonResponse
-      */
-     public function buildSearchUrl(Request $request)
-     {
-         $params = $request->request->all();
-         $type = $params['type'];
-         $state = $params['state'];
-         $hasCredit = filter_var($params['credit'] ?? false, FILTER_VALIDATE_BOOLEAN);
-         $brand = $params['brand'] ?? null;
-         $model = $params['model'] ?? null;
-         $isAjax = $params['isAjax'] ?? null;
-         if (is_array($brand) && count($brand) == 1) {
-             $brand = array_keys($brand)[0];
-         }
-         if (is_array($model) && count($model) == 1) {
-             $model = array_keys($model)[0];
-         }
-         $baseRouteParams = [
-             'type' => $type,
-             'state' => $state,
-         ];
-         if($hasCredit){
-             $baseRouteParams['credit'] = true;
-         }
-         $getParams = [];
-         foreach ($params as $key => $row) {
-             if (!in_array($key, ['type', 'state', 'brand', 'model', 'dynamic']) && $row) {
-                 $getParams[$key] = $row;
-             }
-         }
-         if (is_array($brand)) {
-             $getParams['m-brand'] = $brand;
-             $brand = null;
-         } else if ($brand) {
-             $getParams['m-brand'] = [$brand => true];
-         }
-         if (is_array($model)) {
-             $getParams['m-model'] = $model;
-             $model = null;
-         } else if ($model) {
-             $getParams['m-model'] = [$model => true];
-             $model = null;
-         }
-         $dynamic = [];
-         if (isset($params['dynamic'])) {
-             foreach ($params['dynamic'] as $id => $values) {
-                 if (array_key_exists('from', $values) || array_key_exists('to', $values)) {
-                     $dynamic[$id] = $values;
-                 } else {
-                     foreach ($values as $url => $v) {
-                         if ($v != 'false') {
-                             $dynamic[$id][$url] = 1;
-                         }
-                     }
-                 }
-             }
-         }
-         $catalogCharacteristic = array_flip($this->modelCatalog->getCatalogCharacteristicsId());
-         if (!$brand && !$model && (!count($dynamic) || empty(array_intersect_key($dynamic, $catalogCharacteristic)))) {
-             $url = $this->router
-                 ->generate(
-                     'portal_filter_catalog',
-                     array_merge($baseRouteParams, $getParams, ['dynamic' => $dynamic, 'state' => $state, 'type' => $type])
-                 );
-             $apiUrl = $this->router
-                 ->generate(
-                     'portal_filter_catalog_api',
-                     array_merge($baseRouteParams, $getParams, ['dynamic' => $dynamic, 'state' => $state, 'type' => $type])
-                 );
-             return $this->json(['url' => $url, 'apiUrl' => $apiUrl]);
-         }
-         if (!$brand && !$model && count($dynamic)) {
-             $dId = key($dynamic);
-             $value = key($dynamic[$dId]);
-             if (!count($dynamic[$dId])) {
-                 unset($dynamic[$dId]);
-             }
-             $baseRouteParams['param'] = $dId;
-             $baseRouteParams['value'] = $value;
-             $url = $this->router
-                 ->generate(
-                     'portal_filter_catalog',
-                     array_merge($baseRouteParams, $getParams, ['dynamic' => $dynamic, 'state' => $state, 'type' => $type])
-                 );
-             $apiUrl = $this->router
-                 ->generate(
-                     'portal_filter_catalog_api',
-                     array_merge($baseRouteParams, $getParams, ['dynamic' => $dynamic, 'state' => $state, 'type' => $type])
-                 );
-             return $this->json(['url' => $url, 'apiUrl' => $apiUrl]);
-         }
-         if ($model) {
-             $baseRouteParams['model'] = $model;
-             $baseRouteParams['brand'] = $brand;
-             $url = $this->router
-                 ->generate(
-                     'portal_filter_catalog',
-                     array_merge($baseRouteParams, $getParams, ['dynamic' => $dynamic, 'state' => $state, 'type' => $type])
-                 );
-             $apiUrl = $this->router
-                 ->generate(
-                     'portal_filter_catalog_api',
-                     array_merge($baseRouteParams, $getParams, ['dynamic' => $dynamic, 'state' => $state, 'type' => $type])
-                 );
-             return $this->json(['url' => $url, 'apiUrl' => $apiUrl]);
-         }
-         if ($brand) {
-             $baseRouteParams['brand'] = $brand;
-             $url = $this->router
-                 ->generate(
-                     'portal_filter_catalog',
-                     array_merge($baseRouteParams, $getParams, ['dynamic' => $dynamic, 'state' => $state, 'type' => $type])
-                 );
-             $apiUrl = $this->router
-                 ->generate(
-                     'portal_filter_catalog_api',
-                     array_merge($baseRouteParams, $getParams, ['dynamic' => $dynamic, 'state' => $state, 'type' => $type])
-                 );
-             return $this->json(['url' => $url, 'apiUrl' => $apiUrl]);
-         }
-     }
-     public function catalogSearch(Request $request, EntityManagerInterface $em)
-     {
-         $searchParams = $request->query->all();
-         $routeParams = $request->attributes->get('_route_params');
-         $cookies = $request->cookies->get('compare');
-         $findVehicles = $this->modelCatalog->findByParams($searchParams, $searchParams, self::PRE_PAGES);
-         if(!$findVehicles['data']){
-             $findVehicles = $this->modelCatalog->noFindVehicleByParams($searchParams, $searchParams, self::PRE_PAGES);
-         }
-         $vehicles = $this->modelCatalog->getVehicleByCatalog($this->getUser(), $findVehicles['data'], $searchParams, $cookies);
-         $pagination = $this->modelPagination->initPagination($findVehicles['count'], self::PRE_PAGES, 5);
-         $value = null;
-         $model = '';
-         $brand = '';
-         $vehicleTopViews = [];
-         $type = $request->get('type');
-         $state = $request->get('state');
-         $hasCredit = filter_var($request->get('credit') ?? false, FILTER_VALIDATE_BOOLEAN);
-         if ($request->get('m-brand')) {
-             $brand = array_key_first($request->get('m-brand'));
-         }
-         if ($request->get('m-model')) {
-             $model = array_key_first($request->get('m-model'));
-         }
-         if (isset($searchParams['dynamic'])) {
-             $param = array_key_first($searchParams['dynamic']);
-             if (isset($searchParams['dynamic'][$param])) {
-                 $value = array_key_first($searchParams['dynamic'][$param]);
-             }
-         }
-         if ($brand && $brand === 'all') {
-             throw new NotFoundHttpException();
-         }
-         $findModelUrl = (isset($searchParams['m-model'])) ? key($searchParams['m-model']) : $request->get('model');
-         $param = $request->get('param');
-         $valueParam = $request->get('value');
-         $typeData = VehicleType::getTypeDataByUrl($type);
-         if (!$typeData) {
-             throw new NotFoundHttpException();
-         }
-         $vehicleTypeId = $typeData['id'];
-         $service = $this->catalogService;
-         $filters = $service->getFilters($searchParams, $request->getLocale(), $state, $vehicleTypeId, $brand, $model, $param, $valueParam, $routeParams);
-         $brandEm = $em->getRepository(Brand::class)->getBrandByUrl($brand);
-         $modelEm = $em->getRepository(Model::class)->findOneByUrl($findModelUrl, $brandEm);
-         $catalogNav = $this->modelCatalog->getCatalogNavByGetParams($type, $state, $hasCredit, $brand, $searchParams, $valueParam);
-         if ($brandEm) {
-             if (!$modelEm) {
-                 $vehicleTopViews = $this->modelCatalog->getVehicleTopViews(5, $brandEm);
-             } else {
-                 $vehicleTopViews = $this->modelCatalog->getVehicleItemTopViews(5, $brandEm, $modelEm);
-             }
-         }
-         $dealers = $em->getRepository(Dealer::class)->getDealerByBrandUrl($brandEm);
-         if (!$brand && ($searchParams['type'] == 'truck' || $searchParams['type'] == 'bus')) {
-             $brandSId = [];
-             foreach ($vehicles as $vehicle) {
-                 $brandSId[] = $vehicle['dealer'];
-             }
-             $dealers = $em->getRepository(Dealer::class)->findBy(['id' => $brandSId]);
-         }
-         $dealers = array_filter($dealers, fn($dealer) => $dealer->getId() !== 39);
-         if ($model && !isset($searchParams['model'])) {
-             $searchParams['model'] = $model;
-         }
-         if ($brand && !isset($searchParams['brand'])) {
-             $searchParams['brand'] = $brand;
-         }
-         $seoLinks = $this->seoMetaTag->buildSeoLinks($searchParams, $request->getLocale());
-         $isUsed = $state == 'used';
-         $catalogCharacteristic = $service->catalogCharacteristic($vehicleTypeId, $isUsed);
-         $seoLinks = $service->seoYearsLinksFilter($searchParams, $vehicles, $searchParams, $seoLinks);
-         $OrderCallForm = new Forms();
-         $OrderCallForm = $this->CoreFormFactory()->orderCallForm($OrderCallForm, $brandEm ? $brandEm->getDealer()[0] : null, 1)->createView();
-         return $this->basePortalRender('@Portal/Car/catalog-search.html.twig', [
-             'vehicles' => $vehicles,
-             'seoLinks' => [],
-             'pagination' => $pagination,
-             'filters' => $filters,
-             'catalogNav' => $catalogNav,
-             'baseParams' => $searchParams,
-             'searchParams' => $searchParams,
-             'dealers' => $dealers,
-             'vehicleTopViews' => $vehicleTopViews,
-             'count' => $findVehicles['count'],
-             'type' => $searchParams['type'],
-             'state' => $searchParams['state'],
-             'hasCredit' => $searchParams['hasCredit'] ?? false,
-             'brand' => $brand,
-             'brandEm' => $brandEm,
-             'model' => $model,
-             'modelEm' => $modelEm,
-             'param' => $param,
-             'value' => $request->get('value'),
-             'year' => ($param === 1000) ? $param : $valueParam,
-             'seoMeta' => $this->seoMetaTag->buildSeoMetaGetParams($request, $searchParams, $searchParams, $param, $value),
-             'valueParam' => $catalogCharacteristic[$param][$valueParam] ?? null,
-             'catalogBanner' => $service->getCatalogBanner($request),
-             'OrderCallForm' => $OrderCallForm ?? '',
-         ]);
-     }
-     public function catalogSearchApi(Request $request, EntityManagerInterface $em)
-     {
-         $searchParams = $request->query->all();
-         $routeParams = $request->attributes->get('_route_params');
-         $cookies = $request->cookies->get('compare');
-         $findVehicles = $this->modelCatalog->findByParams($searchParams, $searchParams, self::PRE_PAGES);
-         if(!$findVehicles['data']){
-             $findVehicles = $this->modelCatalog->noFindVehicleByParams($searchParams, $searchParams, self::PRE_PAGES);
-         }
-         $vehicles = $this->modelCatalog->getVehicleByCatalog($this->getUser(), $findVehicles['data'], $searchParams, $cookies);
-         $pagination = $this->modelPagination->initPagination($findVehicles['count'], self::PRE_PAGES, 5);
-         $value = null;
-         $model = '';
-         $brand = '';
-         $vehicleTopViews = [];
-         $type = $request->get('type');
-         $state = $request->get('state');
-         $hasCredit = filter_var($request->get('credit') ?? false, FILTER_VALIDATE_BOOLEAN);
-         if ($request->get('m-brand')) {
-             $brand = array_key_first($request->get('m-brand'));
-         }
-         if ($request->get('m-model')) {
-             $model = array_key_first($request->get('m-model'));
-         }
-         if (isset($searchParams['dynamic'])) {
-             $param = array_key_first($searchParams['dynamic']);
-             if (isset($searchParams['dynamic'][$param])) {
-                 $value = array_key_first($searchParams['dynamic'][$param]);
-             }
-         }
-         if ($brand && $brand === 'all') {
-             throw new NotFoundHttpException();
-         }
-         $findModelUrl = (isset($searchParams['m-model'])) ? key($searchParams['m-model']) : $request->get('model');
-         $param = $request->get('param');
-         $valueParam = $request->get('value');
-         $typeData = VehicleType::getTypeDataByUrl($type);
-         if (!$typeData) {
-             throw new NotFoundHttpException();
-         }
-         $vehicleTypeId = $typeData['id'];
-         $service = $this->catalogService;
-         $filters = $service->getFilters($searchParams, $request->getLocale(), $state, $vehicleTypeId, $brand, $model, $param, $valueParam, $routeParams);
-         $brandEm = $em->getRepository(Brand::class)->getBrandByUrl($brand);
-         $modelEm = $em->getRepository(Model::class)->findOneByUrl($findModelUrl, $brandEm);
-         if ($brandEm) {
-             if (!$modelEm) {
-                 $vehicleTopViews = $this->modelCatalog->getVehicleTopViews(5, $brandEm);
-             } else {
-                 $vehicleTopViews = $this->modelCatalog->getVehicleItemTopViews(5, $brandEm, $modelEm);
-             }
-         }
-         $dealers = $em->getRepository(Dealer::class)->getDealerByBrandUrl($brandEm);
-         if (!$brand && ($searchParams['type'] == 'truck' || $searchParams['type'] == 'bus')) {
-             $brandSId = [];
-             foreach ($vehicles as $vehicle) {
-                 $brandSId[] = $vehicle['dealer'];
-             }
-             $dealers = $em->getRepository(Dealer::class)->findBy(['id' => $brandSId]);
-         }
-         if ($model && !isset($searchParams['model'])) {
-             $searchParams['model'] = $model;
-         }
-         if ($brand && !isset($searchParams['brand'])) {
-             $searchParams['brand'] = $brand;
-         }
-         if ($request->isXmlHttpRequest()) {
-             return $this->json([
-                 'vehicles' => $service->getAjaxResult($vehicles, $request->getLocale()),
-                 'pagination' => $pagination,
-                 'hasCredit' => $searchParams['hasCredit'] ?? false,
-                 'count' => $findVehicles['count'],
-                 'searchFilters' => $filters,
-                 'seoLinks' => []
-             ]);
-         }
-         return false;
-     }
- }
-