- <?php
- namespace AutomarketBundle\Controller;
- use AutomarketBundle\Services\CatalogService;
- use AutomarketBundle\Services\SeoService;
- use CoreBundle\Component\CoreFormFactory;
- use CoreBundle\Model\Vehicles\VehicleType;
- use DcSiteBundle\Model\Pagination;
- use Doctrine\ORM\EntityManagerInterface;
- use PortalBundle\Model\SeoMetaTag;
- use Symfony\Component\HttpFoundation\JsonResponse;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\RequestStack;
- use Symfony\Component\HttpFoundation\Response;
- use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
- class CatalogController extends BaseController
- {
-     private CatalogService $catalogService;
-     private SeoService $seoService;
-     private Pagination $modelPagination;
-     public function __construct(CoreFormFactory $coreFormFactory, RequestStack $requestStack, EntityManagerInterface $em,
-                                 SeoMetaTag      $seoMetaTag, CatalogService $catalogService, SeoService $seoService,
-                                 Pagination      $modelPagination)
-     {
-         parent::__construct($coreFormFactory, $requestStack, $em, $seoMetaTag);
-         $this->catalogService = $catalogService;
-         $this->seoService = $seoService;
-         $this->modelPagination = $modelPagination;
-     }
-     const PRE_PAGES = 18;
-     const MAX_PAGINATION_BUTTON = 5;
-     const TYPE_FILTER_BY_MODEL_UNIQUE = ['BT', 'FT', 'DT', 'TT', 'BC', 'SC'];
-     public function catalog(Request $request): Response
-     {
-         $lang = $request->getLocale();
-         $routeParams = $this->catalogService->getRouteFilterParams($this->getDealer());
-         $vehicleTypeData = VehicleType::getTypeDataByUrl($request->get('type'));
-         if (!$vehicleTypeData) {
-             throw new NotFoundHttpException();
-         }
-         $findVehicles = $this->catalogService->findVehicleByParams(self::PRE_PAGES);
-         if (!$findVehicles['data']) {
-             $findVehicles = $this->catalogService->noFindVehicleByParams(self::PRE_PAGES);
-         }
-         $vehicles = $this->catalogService->getVehicleByCatalog($this->getDealer(), $findVehicles['data'], $this->getUser(), $lang);
-         $vehicleIds = [];
-         foreach ($vehicles as $vehicle) {
-             $vehicleIds[] = $vehicle['id'];
-         }
-         $pagination = $this->modelPagination->initPagination($findVehicles['count'], self::PRE_PAGES, self::MAX_PAGINATION_BUTTON);
-         if (isset($routeParams['characteristic'])
-             && count($routeParams['characteristic']) == 1
-             && isset($routeParams['characteristic']['body'])) {
-             $seoLinks = $this->seoService->buildSeoLinksByBodyType($vehicleIds);
-         } else {
-             $seoLinks = $this->seoService->buildSeoLinks();
-         }
-         $modelRangePage = $this->seoService->findModelRangePage();
-         $breadcrumbs = $this->catalogService->getBreadcrumbs();
-         return $this->baseAutomarketRender('@Automarket/Catalog/catalog.html.twig', [
-             'vehicles' => $vehicles,
-             'seoLinks' => $seoLinks,
-             'modelRangePage' => $modelRangePage,
-             'countVehicle' => $findVehicles['count'],
-             'dataPriceVehicle' => $findVehicles['dataPrice'],
-             'routeParams' => $routeParams,
-             'pagination' => $pagination,
-             'breadcrumbs' => $breadcrumbs,
-             'pageReload' => true,
-         ]);
-     }
-     public function catalogSearch(Request $request): Response
-     {
-         $routeParams = $request->query->all();
-         return $this->baseAutomarketRender('@Automarket/Catalog/catalog.html.twig', [
-             'routeParams' => $routeParams,
-             'pageReload' => false,
-         ]);
-     }
-     public function initFilter(Request $request): JsonResponse
-     {
-         $lang = $request->getLocale();
-         $filter = $this->catalogService->buildFilter(self::TYPE_FILTER_BY_MODEL_UNIQUE);
-         $findVehicles = $this->catalogService->findVehicleByParams(self::PRE_PAGES);
-         if (!$findVehicles['data']) {
-             $findVehicles = $this->catalogService->noFindVehicleByParams(self::PRE_PAGES);
-         }
-         $vehicle = $this->catalogService->getVehicleByCatalog($this->getDealer(), $findVehicles['data'], $this->getUser(), $lang);
-         $pagination = $this->modelPagination->initPagination($findVehicles['count'], self::PRE_PAGES, 5);
-         $showMore = $this->catalogService->showMoreCatalog($findVehicles['count'], self::PRE_PAGES);
-         $filterHeader = $this->catalogService->getFilterHeader();
-         return $this->json([
-             'filter' => $filter,
-             'countVehicle' => $findVehicles['count'],
-             'vehicle' => $vehicle,
-             'pagination' => $pagination,
-             'showMore' => $showMore,
-             'filterHeader' => $filterHeader
-         ]);
-     }
-     public function getCountVehicleByFilter(): JsonResponse
-     {
-         $findVehicles = $this->catalogService->findVehicleByParams(self::PRE_PAGES);
-         $buildUrl = $this->catalogService->buildSearchUrl();
-         return $this->json([
-             'countVehicle' => $findVehicles['count'],
-             'url' => $buildUrl,
-         ]);
-     }
-     public function getVehicleByFilter(Request $request): JsonResponse
-     {
-         $lang = $request->getLocale();
-         $findVehicles = $this->catalogService->findVehicleByParams(self::PRE_PAGES);
-         if (!$findVehicles['data']) {
-             $findVehicles = $this->catalogService->noFindVehicleByParams(self::PRE_PAGES);
-         }
-         $vehicle = $this->catalogService->getVehicleByCatalog($this->getDealer(), $findVehicles['data'], $this->getUser(), $lang);
-         $filterHeader = $this->catalogService->getFilterHeader();
-         $pagination = $this->modelPagination->initPagination($findVehicles['count'], self::PRE_PAGES, 5);
-         $showMore = $this->catalogService->showMoreCatalog($findVehicles['count'], self::PRE_PAGES);
-         $buildUrl = $this->catalogService->buildSearchUrl();
-         return $this->json([
-             'countVehicle' => $findVehicles['count'],
-             'vehicle' => $vehicle,
-             'url' => $buildUrl,
-             'pagination' => $pagination,
-             'showMore' => $showMore,
-             'filterHeader' => $filterHeader
-         ]);
-     }
- }
-