<?php
namespace App\Service;
use App\Adapter\AppointmentAdapter;
use App\Adapter\VehicleAdapter;
use App\Mapper\AppointmentMapper;
use App\Model\Client;
use App\Model\Vehicle;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Serializer\SerializerInterface;
class VehicleService extends AppointmentService
{
private LoggerInterface $logger;
private VehicleAdapter $vehicleAdapter;
public function __construct(AppointmentAdapter $adapter, AppointmentMapper $mapper, ClientService $clientService, SerializerInterface $serializer, VehicleAdapter $vehicleAdapter)
{
parent::__construct($adapter, $mapper, $clientService, $serializer);
$this->vehicleAdapter = $vehicleAdapter;
}
public function all(): array
{
return $this->vehicleAdapter->getAllVehicles();
}
public function getOrderedVehicles(bool $isUserConnected, Vehicle $selectedVehicle, array &$vehicles)
{
if ($isUserConnected) {
if ($upsertVehicle = $this->clientService->upsertVehicle($selectedVehicle)) {
$this->addToVehicles($vehicles, $upsertVehicle);
}
} else {
$this->addToVehicles($vehicles, $selectedVehicle);
}
}
public function getVehicles(bool $isUserConnected, ?Client $user, SerializerInterface $serializer, AppointmentService $appointmentService, SessionInterface $session): array
{
if ($isUserConnected) {
$userVehicles = $user->getVehicles();
$vehicles = [];
foreach ($userVehicles as $car) {
/** @var Vehicle $userVehicle */
$userVehicle = $serializer->deserialize(json_encode($car, JSON_THROW_ON_ERROR), Vehicle::class, 'json');
$appointmentService->addToVehicles($vehicles, $userVehicle);
}
} else {
$vehicles = $session->get('vehicles', []);
}
return $vehicles;
}
}