<?php
namespace DcSiteBundle\Services;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use CoreBundle\Entity\Dealer;
use CoreBundle\Factory\Vehicle as VehicleFactory;
use CoreBundle\Services\ImageProviderVidi;
use CoreBundle\Services\MediaExtensionVidi;
use DcSiteBundle\Entity\MainSlider;
use Symfony\Component\DependencyInjection\ContainerInterface;
class MainSliderService
{
private VehicleFactory $vehicleFactory;
private ContainerInterface $container;
private EntityManagerInterface $entityManager;
private MediaExtensionVidi $mediaExtensionVidi;
private string $lang;
private bool $isMobile = false;
private $slide = 0;
public function __construct(
VehicleFactory $vehicleFactory,
ContainerInterface $container,
EntityManagerInterface $entityManager,
MediaExtensionVidi $mediaExtensionVidi
)
{
$this->vehicleFactory = $vehicleFactory;
$this->container = $container;
$this->entityManager = $entityManager;
$this->mediaExtensionVidi = $mediaExtensionVidi;
}
public function setLang(string $lang): MainSliderService
{
$this->lang = $lang;
return $this;
}
public function setIsMobile(bool $isMobile): MainSliderService
{
$this->isMobile = $isMobile;
return $this;
}
public function setSlideFirst(int $slide): MainSliderService
{
$this->slide = $slide;
return $this;
}
/**
* @param Dealer $dealer
* @return array
* @throws Exception
*/
public function getSlides(Dealer $dealer): array
{
$slides = $this->entityManager
->getRepository(MainSlider::class)
->getMainSlidersByDealer($dealer);
if (empty($slides)) {
return [];
}
$arr = [];
/**
* @var $slider MainSlider
*/
foreach ($slides as $key => $slider) {
$media = $this->isMobile ? $slider->getImageMobile() : $slider->getImage();
$media ??= $slider->getImage();
if (empty($media)) {
continue;
}
$arr[$key] = [
'id' => $slider->getId(),
'img' => '',
'img_webp' => '',
'url' => $slider->buildUrl($this->lang),
'position' => $slider->getPosition(),
'title' => $slider->getTitle($this->lang),
'subTitle' => $slider->getSubTitle($this->lang),
'btn' => $slider->getBtnFstTitle($this->lang),
'stateTitle' => $slider->getStateTitle(),
'stateSubTitle' => $slider->getStateSubTitle(),
'btnSecTitle' => '',
'btnSecUrl' => '',
'car' => 0
];
/**
* @var ImageProviderVidi $provider
*/
$provider = $this->container->get($media->getProviderName());
if (!empty($provider)) {
$arr[$key]['img'] = $provider->generatePublicUrl($media, $provider->getFormatName($media, 'reference'));
$arr[$key]['img_webp'] = $provider->generatePublicUrlWebp($media, $provider->getFormatName($media, 'reference'));
}
$title = $slider->getBtnSecTitle($this->lang);
$titleUrl = $slider->buildSecondUrl($this->lang);
if (!empty($title) && !empty($titleUrl)) {
$arr[$key]['btnSecTitle'] = $title;
$arr[$key]['btnSecUrl'] = $titleUrl;
}
if (!empty($slider->getVehicle())) {
$vehicle = $this->vehicleFactory->createByEntity($slider->getVehicle());
$arr[$key]['car'] = !empty($vehicle) ? $vehicle->price() : 0;
}
if ($this->slide && $this->slide === $arr[$key]['position']) {
array_unshift($arr, array_pop($arr));
}
}
return $arr;
}
public function getSlidesNew(Dealer $dealer): array
{
$slides = $this->entityManager
->getRepository(MainSlider::class)
->getMainSlidersByDealer($dealer);
if (empty($slides)) {
return [];
}
$arr = [];
/**
* @var $slider MainSlider
*/
foreach ($slides as $key => $slider) {
$arr[$key] = [
'id' => $slider->getId(),
'img' => $this->mediaExtensionVidi->getPath($slider->getImage(), 'reference'),
'img_mob' => $this->mediaExtensionVidi->getPath($slider->getImageMobile(), 'reference'),
'img_webp' => $this->mediaExtensionVidi->pathWebp($slider->getImage(), 'reference'),
'img_webp_mob' => $this->mediaExtensionVidi->pathWebp($slider->getImageMobile(), 'reference'),
'url' => $slider->buildUrl($this->lang),
'position' => $slider->getPosition(),
'title' => $slider->getTitle($this->lang),
'subTitle' => $slider->getSubTitle($this->lang),
'btn' => $slider->getBtnFstTitle($this->lang),
'stateTitle' => $slider->getStateTitle(),
'stateSubTitle' => $slider->getStateSubTitle(),
'btnSecTitle' => $slider->getBtnSecTitle($this->lang),
'btnSecUrl' => $slider->buildSecondUrl($this->lang),
'car' => 0
];
if (!empty($slider->getVehicle())) {
$vehicle = $this->vehicleFactory->createByEntity($slider->getVehicle());
$arr[$key]['car'] = !empty($vehicle) ? $vehicle->price() : 0;
}
if ($this->slide && $this->slide === $arr[$key]['position']) {
array_unshift($arr, array_pop($arr));
}
}
return $arr;
}
public function getSlidesNewForApi(Dealer $dealer, $host): array
{
$slides = $this->entityManager
->getRepository(MainSlider::class)
->getMainSlidersByDealer($dealer);
if (empty($slides)) {
return [];
}
$arr = [];
/**
* @var $slider MainSlider
*/
foreach ($slides as $key => $slider) {
$arr[$key] = [
'id' => $slider->getId(),
'img' => [
'id' => $slider->getImage() ? $slider->getImage()->getId() : null,
'src' => $host . $this->mediaExtensionVidi->getPath($slider->getImage(), 'reference'),
'width' => $slider->getImage() ? $slider->getImage()->getWidth() : null,
'height' => $slider->getImage() ? $slider->getImage()->getHeight() : null
],
'imgMob' => [
'id' => $slider->getImageMobile() ? $slider->getImageMobile()->getId() : null,
'src' => $host . $this->mediaExtensionVidi->getPath($slider->getImageMobile(), 'reference'),
'width' => $slider->getImageMobile() ? $slider->getImageMobile()->getWidth() : null,
'height' => $slider->getImageMobile() ? $slider->getImageMobile()->getHeight() : null
],
'imgWebp' => [
'id' => $slider->getImage() ? $slider->getImage()->getId() : null,
'src' => $host . $this->mediaExtensionVidi->pathWebp($slider->getImage(), 'reference'),
'width' => $slider->getImage() ? $slider->getImage()->getWidth() : null,
'height' => $slider->getImage() ? $slider->getImage()->getHeight() : null
],
'imgWebpMob' => [
'id' => $slider->getImageMobile() ? $slider->getImageMobile()->getId() : null,
'src' => $host . $this->mediaExtensionVidi->pathWebp($slider->getImageMobile(), 'reference'),
'width' => $slider->getImageMobile() ? $slider->getImageMobile()->getWidth() : null,
'height' => $slider->getImageMobile() ? $slider->getImageMobile()->getHeight() : null
],
'url' => $slider->buildUrl($this->lang),
'position' => $slider->getPosition(),
'title' => $slider->getTitle($this->lang),
'subTitle' => $slider->getSubTitle($this->lang),
'btn' => $slider->getBtnFstTitle($this->lang),
'stateTitle' => $slider->getStateTitle(),
'stateSubTitle' => $slider->getStateSubTitle(),
'btnSecTitle' => $slider->getBtnSecTitle($this->lang),
'btnSecUrl' => $slider->buildSecondUrl($this->lang),
'car' => 0
];
if (!empty($slider->getVehicle())) {
$vehicle = $this->vehicleFactory->createByEntity($slider->getVehicle());
$arr[$key]['car'] = !empty($vehicle) ? $vehicle->price() : 0;
}
if ($this->slide && $this->slide === $arr[$key]['position']) {
array_unshift($arr, array_pop($arr));
}
}
return $arr;
}
}