<?php 
 
namespace DcSiteBundle\Controller\Suzuki; 
 
use CoreBundle\Component\CoreFormFactory; 
use CoreBundle\Component\FormManager; 
use CoreBundle\Entity\Forms; 
use CoreBundle\Entity\Vehicles\Group; 
use CoreBundle\Entity\Vehicles\RecommendGroup; 
use CoreBundle\Entity\Vehicles\Vehicle; 
use CoreBundle\Entity\Vehicles\VehicleFile; 
use CoreBundle\Factory\InStockVehicle; 
use CoreBundle\Factory\Vehicle as VehicleFactory; 
use CoreBundle\Model\Api\OnlineService\ApiServer1C; 
use CoreBundle\Model\Vehicles\Repository; 
use CoreBundle\Model\Vehicles\VehicleType; 
use CoreBundle\Services\MediaExtensionVidi; 
use DateTime; 
use DcSiteBundle\Enum\DealerPathEnum; 
use DcSiteBundle\Model\CreditModel; 
use DcSiteBundle\Services\AccessoryService; 
use DcSiteBundle\Services\CarInStockService; 
use DcSiteBundle\Services\HistoryManager; 
use DcSiteBundle\Services\ModelRange\Pages\PagesService; 
use DcSiteBundle\Services\UsedVehicleService; 
use DcSiteBundle\Services\VehicleService; 
use DcSiteBundle\Services\VehicleViewService; 
use Doctrine\ORM\EntityManagerInterface; 
use InsuranceBundle\Model\Program; 
use PortalBundle\Model\SeoMetaTag; 
use Symfony\Component\Filesystem\Filesystem; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\RequestStack; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpFoundation\Session\SessionInterface; 
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 
use Symfony\Component\Routing\RouterInterface; 
use Twig\Environment; 
 
 
class CarController extends BaseController 
{ 
    private CarInStockService $carInStockService; 
    private UsedVehicleService $usedVehicleService; 
 
    public function __construct(CarInStockService $carInStockService, UsedVehicleService $usedVehicleService, CoreFormFactory $coreFormFactory, SeoMetaTag $seoMetaTag, RequestStack $requestStack, RouterInterface $router, FormManager $formManager, EntityManagerInterface $em, ApiServer1C $apiServer1C, SessionInterface $session, Filesystem $filesystem, MediaExtensionVidi $mediaExtensionVidi, Repository $vehicleRepository, VehicleFactory $vehicleFactory, Environment $twig) 
    { 
        $this->carInStockService = $carInStockService; 
        $this->usedVehicleService = $usedVehicleService; 
        parent::__construct($coreFormFactory, $seoMetaTag, $requestStack, $router, $formManager, $em, $apiServer1C, $session, $filesystem, $mediaExtensionVidi, $vehicleRepository, $vehicleFactory, $twig); 
    } 
 
    public function car(Request $request, VehicleService $vehicleService, AccessoryService $accessoryService, HistoryManager $historyManager, $car): ?Response 
    { 
        $Dealer = $this->getDealer(); 
        $vehicle = $this->vehicleFactory->createByUrl($car, $Dealer); 
        if (!$vehicle) { 
            throw new NotFoundHttpException(); 
        } 
 
        $VehicleEm = $vehicle->getVehicleEntity(); 
        $vehiclePrice = $vehicleService->getVehiclePrice($VehicleEm); 
        $vehicleColor = $vehicleService->getVehicleColor($VehicleEm); 
        $carInStock = $this->carInStockService->getCarInStockByModel($this->getDealer(), $request->getLocale(), $VehicleEm->getModel(), 4); 
        $vehicleFaqs = $vehicleService->getVehicleFaqs($VehicleEm); 
        $vehicleAccessory = $accessoryService->getAccessoriesByDealerVehicleType($Dealer); 
 
 
        $files = []; 
        foreach ($vehicle->getFiles() as $row) { 
            $files[] = [ 
                'files' => $row, 
                'position' => $row->getPosition(), 
            ]; 
        } 
 
        usort($files, fn($a, $b) => $a['position'] <=> $b['position']); 
 
 
        $historyManager->setUserCarHistory($this->getUser(), $vehicle->getVehicleEntity()); 
 
        $TdForm = new Forms(); 
        $TdForm->setVehicle($vehicle->getVehicleEntity()); 
 
        $form = $this->CoreFormFactory() 
            ->callMeForm(new Forms(), true); 
        $form->get('dealer')->setData($this->getDealer()); 
 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/car-card.html.twig', [ 
            'model' => $vehicle, 
            'vehiclePrice' => $vehiclePrice, 
            'vehicleColor' => $vehicleColor, 
            'carInStock' => $carInStock, 
            'faqs' => $vehicleFaqs, 
            'vehicleAccessory' => $vehicleAccessory, 
            'modelFiles' => $files, 
            'buyForm' => $this->CoreFormFactory()->buyForm(null, $vehicle->getVehicleEntity(), null, null, false, false, $vehicle->getPrice())->createView(), 
            'buyPartsForm' => $this->CoreFormFactory()->buyPartsForm($this->getDealer())->createView(), 
            'testDrivePageForm' => $this->CoreFormFactory()->testDriveForm($this->getDealer(), $TdForm)->createView(), 
            'structuredData' => $this->getCarPageStructuredData($request, $vehicle), 
            'callMeForm' => $form->createView() 
        ]); 
    } 
 
    public function carConfiguraion(VehicleService $vehicleService, $car): Response 
    { 
        $Dealer = $this->getDealer(); 
        $Vehicle = $this->vehicleFactory->createByUrl($car, $Dealer); 
        if (!$Vehicle) { 
            throw new NotFoundHttpException(); 
        } 
 
        $VehicleEm = $Vehicle->getVehicleEntity(); 
        $vehicleEquipment = $vehicleService->getVehicleEquipment($VehicleEm); 
 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/configuration.html.twig', [ 
            'model' => $Vehicle, 
            'vehicleEquipment' => $vehicleEquipment, 
        ]); 
    } 
 
    public function moto(Request $request, HistoryManager $historyManager, VehicleService $vehicleService, $moto) 
    { 
        $Dealer = $this->getDealer(); 
        $Vehicle = $this->vehicleFactory->createByUrl($moto, $Dealer); 
        if (!$Vehicle) { 
            throw new NotFoundHttpException(); 
        } 
 
        $historyManager->setUserCarHistory($this->getUser(), $Vehicle->getVehicleEntity()); 
        $vehicleFaqs = $vehicleService->getVehicleFaqs($Vehicle->getVehicleEntity()); 
 
        $carInStock = $this->carInStockService->getCarInStockByModel($this->getDealer(),$request->getLocale(),$Vehicle->getVehicleEntity()->getModel(), 4); 
 
        return $this->baseSuzukiRender( 
            '@DcSite/Suzuki/Car/moto-card.html.twig', 
            [ 
                'model' => $Vehicle, 
                'carInStock' => $carInStock, 
                'faqs' => $vehicleFaqs, 
                'buyForm' => $this->CoreFormFactory()->buyForm(null, $Vehicle->getVehicleEntity())->createView(), 
                'buyPartsForm' => $this->CoreFormFactory()->buyPartsForm($this->getDealer())->createView(), 
                'structuredData' => $this->getCarPageStructuredData($request, $Vehicle), 
                'testDriveForm' => 
                    $this->CoreFormFactory() 
                        ->motoTestDriveForm($this->getDealer(), null, $Vehicle->getVehicleEntity()->getId()) 
                        ->createView(), 
            ] 
        ); 
    } 
 
    public function motoConfiguraion($moto): Response 
    { 
        $Dealer = $this->getDealer(); 
        $Vehicle = $this->vehicleFactory->createByUrl($moto, $Dealer); 
        if (!$Vehicle) { 
            throw new NotFoundHttpException(); 
        } 
 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/moto-configuration.html.twig', [ 
            'model' => $Vehicle, 
        ]); 
    } 
 
    public function testDrive(): ?Response 
    { 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/test-drive.html.twig', [ 
            'testDrivePageForm' => $this->CoreFormFactory()->testDriveForm($this->getDealer(), null, [ 
                'child' => false, 
                'widthTime' => true 
            ])->createView(), 
        ]); 
    } 
 
    public function lineUpCar(Request $request, PagesService $pagesService): Response 
    { 
        $cars = $this->vehicleRepository->getVehicleByType($this->getDealer(), VehicleType::PASSENGER_TYPE); 
        $carsResult = []; 
        foreach ($cars as $car) { 
            $model = $this->vehicleFactory->createByEntity($car); 
            if (!$model) { 
                continue; 
            } 
            $carsResult[] = $model; 
        } 
        $moto = $this->vehicleRepository->getVehicleByType($this->getDealer(), VehicleType::MOTO_TYPE); 
        $selection = []; 
        $motoResult = []; 
        /** @var Vehicle $item */ 
        foreach ($moto as $item) { 
            $group = $item->getGroup(); 
            if (!$group) { 
                continue; 
            } 
 
            if (!isset($motoResult[$group->getId()])) { 
                $motoResult[$group->getId()] = [ 
                    'id' => $group->getId(), 
                    'hasPrice' => false, 
                    'title' => $group->getTitle($request->getLocale()), 
                    'image' => $group->getPreview(), 
                    'position' => $group->getPosition(), 
                    'items' => [], 
                ]; 
            } 
            $motoResult[$group->getId()]['items'][] = [ 
                'title' => $item->getModel()->getTitle(), 
                'url' => $item->getUrl(), 
            ]; 
            $motoItem = $this->vehicleFactory->createByEntity($item); 
            if ($motoItem && $motoItem->price() > 0) { 
                $motoResult[$group->getId()]['hasPrice'] = true; 
            } 
 
        } 
 
        usort($selection, fn($a, $b) => ($a['position'] == $b['position']) ? 0 : (($a['position'] < $b['position']) ? -1 : 1)); 
 
        usort($motoResult, fn($a, $b) => ($a['position'] == $b['position']) ? 0 : (($a['position'] < $b['position']) ? -1 : 1)); 
 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/model-lineup.html.twig', [ 
            'cars' => $carsResult, 
            'moto' => $motoResult, 
            'selection' => $selection, 
            'catalogModelRangePages' => $pagesService 
                ->setLang($request->getLocale()) 
                ->getPages($this->getDealer()) 
        ]); 
    } 
 
    public function lineUpCarPage(Request $request, PagesService $pagesService, string $url): ?Response 
    { 
        $page = $pagesService->setLang($request->getLocale())->getPage($this->getDealer(), $url); 
 
        if (empty($page)) { 
            throw new NotFoundHttpException(); 
        } 
 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/model-lineup-page.html.twig', ['page' => $page]); 
    } 
 
 
    public function lineUpMoto(): ?Response 
    { 
        $moto = $this->vehicleRepository 
            ->getVehicleByType($this->getDealer(), VehicleType::MOTO_TYPE); 
        $motoResult = []; 
        $selection = []; 
        /** @var Vehicle $item */ 
        foreach ($moto as $item) { 
            $model = $this->vehicleFactory->createByEntity($item); 
            if (!$model) { 
                continue; 
            } 
            $motoResult[] = $model; 
        } 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/moto-model-lineup.html.twig', [ 
            'moto' => $motoResult, 
            'selection' => $selection, 
        ]); 
    } 
 
    public function selection(Request $request): ?Response 
    { 
        $id = $request->get('id'); 
        $recomendGroup = $this->em->getRepository(RecommendGroup::class)->find($id); 
        if (!$recomendGroup) { 
            throw  $this->createNotFoundException(); 
        } 
        $moto = $this->vehicleRepository->getByRecommendGroup($this->getDealer(), $id); 
        $motoResult = []; 
        /** @var Vehicle $item */ 
        foreach ($moto as $item) { 
            $model = $this->vehicleFactory->createByEntity($item); 
            if (!$model) { 
                continue; 
            } 
            $motoResult[] = $model; 
        } 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/catalog-scooter.html.twig', [ 
            'recomendGroup' => $recomendGroup, 
            'moto' => $motoResult, 
        ]); 
    } 
 
    public function group(Request $request): ?Response 
    { 
        $id = $request->get('id'); 
        $Group = $this->em->getRepository(Group::class)->find($id); 
        if (!$Group) { 
            throw  $this->createNotFoundException(); 
        } 
        $moto = $this->vehicleRepository->findByGroup($id, $this->getDealer()); 
        $motoResult = []; 
        /** @var Vehicle $item */ 
        foreach ($moto as $item) { 
            $model = $this->vehicleFactory->createByEntity($item); 
            if (!$model) { 
                continue; 
            } 
            $motoResult[] = $model; 
        } 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/catalog-city-bike.html.twig', [ 
            'Group' => $Group, 
            'moto' => $motoResult, 
        ]); 
    } 
 
    public function carInStock(Request $request): Response 
    { 
        $vehicles = $this->carInStockService->getCarInStockByDealer( 
            $this->getDealer(), 
            VehicleType::PASSENGER_TYPE, 
            $request->getLocale() 
        ); 
 
        $this->carInStockService->sortVehicleByDealer($vehicles, $this->getDealer()->getUniqueId()); 
 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/car-in-stocks.html.twig', ['vehicles' => $vehicles]); 
    } 
 
    public function motoInStock(Request $request): ?Response 
    { 
        $vehicles = $this->carInStockService->getCarInStockByDealer( 
            $this->getDealer(), 
            VehicleType::MOTO_TYPE, 
            $request->getLocale() 
        ); 
 
        $this->carInStockService->sortVehicleByDealer($vehicles, $this->getDealer()->getUniqueId()); 
 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/moto-in-stocks.html.twig', ['vehicles' => $vehicles]); 
    } 
 
    //  Used Moto 
    public function usedMotoCatalog(): ?Response 
    { 
        $technique = $this->usedVehicleService->getMotosData($this->getDealer(), true, VehicleType::MOTO_TYPE); 
        $craftedTech = []; 
        /** @var Vehicle $tech */ 
        foreach ($technique as $tech) { 
            $techModel = $this->vehicleFactory->createByEntity($tech); 
            if (!$techModel) { 
                continue; 
            } 
            $craftedTech[] = [ 
                "id" => $techModel->getVehicleId(), 
                "title" => $techModel->getFullName(), 
                "price" => $techModel->price(), 
                "year" => $techModel->getYear(), 
                'mileage' => $techModel->getMileage(), 
                "link" => $techModel->getUrl(), 
                "image" => $this->mediaExtensionVidi->getPath($tech->getPreview(), 'small') 
            ]; 
        } 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/used-moto-in-stocks.html.twig', [ 
            'tech' => $craftedTech, 
            'commissionForm' => $this->CoreFormFactory()->commissionTechnologyForm()->createView() 
        ]); 
    } 
 
//  Used Moto ID 
    public function usedMotoID($url) 
    { 
        $vehicle = $this->vehicleFactory->createByUrl($url, $this->getDealer()); 
        if (!$vehicle) { 
            return $this->redirectToRoute('suzuki_used_moto_catalog', [], 301); 
        } 
        $forms = new Forms(); 
        $forms->setVehicle($vehicle->getVehicleEntity()); 
        $forms->setDealer($this->getDealer()); 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/used-moto-in-stocks-id.html.twig', [ 
            'car' => $vehicle, 
            'buyForm' => $this->CoreFormFactory()->buyForm($forms, $vehicle->getVehicleEntity())->createView(), 
        ]); 
    } 
 
    public function carInStockSingle(Request $request, InStockVehicle $inStockVehicleFactory, $url): Response 
    { 
        $car = $inStockVehicleFactory->createByUrl($url, $this->getDealer()); 
 
        if (!$car) { 
            $car = $inStockVehicleFactory->createByUrl($url, $this->getDealer(), false); 
            if ($car) { 
                return $this->redirectToRoute('suzuki_card_car', ['car' => $car->getVehicle()->getUrl()], Response::HTTP_MOVED_PERMANENTLY); 
            } else { 
                throw new NotFoundHttpException(); 
            } 
        } 
        $options = $car->getOptions($request->getLocale()); 
 
        $form = $this->CoreFormFactory() 
            ->callMeForm(new Forms(), true); 
        $form->get('dealer')->setData($this->getDealer()); 
 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/car-in-stock-card.html.twig', [ 
            'model' => $car, 
            'buyInStockForm' => $this->CoreFormFactory()->buyInStockForm(null, $car->getInStockEntity())->createView(), 
            'options' => $options, 
            'callMeForm' => $form->createView() 
        ]); 
    } 
 
    public function configurator(Request $request) 
    { 
        $url = $request->get('car'); 
        $Vehicle = false; 
        //TODO remove magic numbers 
        $carId = 0; 
        if ($url != 'start') { 
            $Vehicle = $this->vehicleFactory->createByUrl($url, $this->getDealer()); 
            if (!$Vehicle) { 
                return $this->redirectToRoute('suzuki_car_stock', [], 301); 
            } 
            $carId = $Vehicle->getVehicleId(); 
        } 
        $hash = $request->query->get('hash'); 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Configurator/index.html.twig', [ 
            'carId' => $carId, 
            'car' => $Vehicle, 
            'baseType' => Program::BASE_COEFFICIENT_TYPE, 
            'listType' => Program::LIST_COEFFICIENT_TYPE, 
            'optionType' => Program::OPTION_COEFFICIENT_TYPE, 
            'hash' => $hash, 
        ]); 
    } 
 
    public function priceList(Request $request): ?Response 
    { 
        $vehicles = $this->vehicleRepository->getNewByDealer($this->getDealer()); 
        $result = []; 
        /** @var Vehicle $car */ 
        foreach ($vehicles as $car) { 
            $vehicleId = $car->getId(); 
            $files = $car->getFiles(); 
            if (!$files->count()) { 
                continue; 
            } 
            $item = [ 
                'car' => $car, 
                'files' => [], 
            ]; 
            /** @var VehicleFile $file */ 
            foreach ($files as $file) { 
                $item['files'][] = [ 
                    'title' => $file->getTitle($request->getLocale()), 
                    'href' => $this->router->generate('base_download_file', ['id' => $file->getId()]) 
                ]; 
            } 
            $result[$vehicleId] = $item; 
            $position[$vehicleId] = $car->getPosition(); 
        } 
        array_multisort($position, SORT_ASC, $result); 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/price-list-and-catalog.html.twig', ['cars' => $result]); 
    } 
 
    public function archive(): ?Response 
    { 
        $vehicles = $this->vehicleRepository->getDisabled($this->getDealer()); 
        $result = []; 
        foreach ($vehicles as $vehicle) { 
            $model = $this->vehicleFactory->createByEntity($vehicle); 
            if (!$model) { 
                continue; 
            } 
            $result[] = $model; 
        } 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/archive.html.twig', ['cars' => $result]); 
    } 
 
    public function usedCarCatalog(Request $request): ?Response 
    { 
        $vehicles = $this->usedVehicleService->getUsedVehicles( 
            $this->getDealer(), 
            DealerPathEnum::SUZUKI, 
            $request->getLocale(), 
            true, 
            null, 
            VehicleType::PASSENGER_TYPE 
        ); 
 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/used-car-catalog.html.twig', ['vehicles' => $vehicles]); 
    } 
 
    public function secondhandSingle(Request $request, VehicleViewService $vehicleViewService, CreditModel $creditModel, $url): ?Response 
    { 
        if (!$url) { 
            throw new NotFoundHttpException(); 
        } 
 
        $vehicle = $this->vehicleFactory->createUsedByUrl($url); 
        if (!$vehicle) { 
            throw new NotFoundHttpException(); 
        } 
 
        $vehicleViewService->saveViewVehicle($vehicle, $request->getClientIp(), new DateTime()); 
 
        $viewedCars = []; 
        if (isset($_COOKIE['viewedCars'])) { 
            $viewedCars = json_decode($_COOKIE['viewedCars']); 
            if (!in_array($vehicle->getVehicleId(), $viewedCars)) { 
                $viewedCars[] = $vehicle->getVehicleId(); 
            } 
        } else { 
            setcookie('viewedCars', json_encode([$vehicle->getVehicleId()])); 
        } 
 
        $viewedCarEntities = $this->em->getRepository(Vehicle::class) 
            //TODO remove magic numbers 
            ->findBy(['id' => array_slice(array_reverse(array_diff($viewedCars, [$vehicle->getVehicleId()])), 0, 3)]); 
 
 
        $viewedCarFactories = []; 
        foreach ($viewedCarEntities as $viewedCarEntity) { 
            $viewedCarFactory = $this->vehicleFactory->createByEntity($viewedCarEntity); 
            $galleryItems = $viewedCarFactory->getGallery() 
                ? $viewedCarFactory->getGallery()->getGalleryItems() 
                : null; 
            $image = $galleryItems && $galleryItems->count() 
                ? $galleryItems->first()->getMedia() 
                : $viewedCarFactory->getPreview(); 
            $viewedCarFactories[] = [ 
                'vehicle' => $viewedCarFactory, 
                'image' => $this->mediaExtensionVidi->getPath($image, 'reference'), 
                'link' => $this->router 
                    ->generate('suzuki_used_car_single', ['url' => $viewedCarFactory->getUrl()]), 
            ]; 
        } 
 
        $galleryItems = $vehicle->getGallery()->getGalleryItems(); 
        $gallery_images = []; 
        if ($galleryItems && $galleryItems->count()) { 
            foreach ($galleryItems as $galleryItem) { 
                $gallery_images[] = $this->mediaExtensionVidi 
                    ->getPath($galleryItem->getMedia(), 'reference'); 
            } 
        } 
        $similarVehicles = []; 
        $similar = $this->vehicleRepository->getSimilarVehicles($vehicle, true, false, true); 
 
        foreach ($similar as $vehicleItem) { 
            $vehicleItemGallery = $this->vehicleFactory 
                ->createByEntity($vehicleItem->getVariation()->getVehicle()) 
                ->getGallery() 
                ->getGalleryItems(); 
            $vehicleItemGalleryImages = []; 
            if ($vehicleItemGallery && $vehicleItemGallery->count()) { 
                foreach ($vehicleItemGallery as $vehicleItemGallery_item) { 
                    $vehicleItemGalleryImages[] = $this->mediaExtensionVidi 
                        ->getPath($vehicleItemGallery_item->getMedia(), 'reference'); 
                } 
            } 
            $similarVehicles[] = [ 
                'vehicle' => $this->vehicleFactory->createByEntity($vehicleItem->getVariation()->getVehicle()), 
                'creditPayment' => $creditModel->getMinPayment($this->vehicleFactory->createByEntity($vehicleItem->getVariation()->getVehicle())), 
                'link' => $this->router->generate('suzuki_used_car_single', ['url' => $vehicle->getUrl()]), 
                'gallery' => $vehicleItemGalleryImages 
            ]; 
        } 
 
        $options = $vehicle->getOptionsArray($request->getLocale()); 
 
        return $this->baseSuzukiRender('@DcSite/Suzuki/Car/used-car-single.html.twig', [ 
            'secondhand' => $vehicle, 
            'options' => $options, 
            'buyForm' => $this->CoreFormFactory()->buyForm(null, $vehicle->getVehicleEntity(), null, null, true, false, $vehicle->getPrice())->createView(), 
            'consultationForm' => $this->CoreFormFactory()->buyForm(null, $vehicle->getVehicleEntity())->createView(), 
            'gallary' => $gallery_images, 
            'creditPayment' => $creditModel->getMinPayment($vehicle), 
            'similarCars' => $similarVehicles, 
            'viewedCars' => $viewedCarFactories, 
            'structuredCarData' => $this->getCarStructuredDataCarUsed($request, $vehicle) 
        ]); 
    } 
}