<?php
namespace App\Controller;
use App\Services\Api\Attraction\AttractionService;
use App\Services\Api\Category\CategoryService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class SearchController extends AbstractController
{
private $categoryService;
private $attractionService;
private $requestStack;
public function __construct(RequestStack $requestStack, CategoryService $categoryService, AttractionService $attractionService){
$this->categoryService = $categoryService;
$this->attractionService = $attractionService;
$this->requestStack = $requestStack;
}
#[Route('/search', name: 'app_search_page')]
public function index(Request $request): Response
{
$page = $request->query->getInt('page', 1);
$categories = $this->categoryService->getCategories();
$categorySearch = null;
$categoryArray = [];
if ($request->query->has('categoryId')){
$categoriesString= (string)$request->query->get('categoryId');
$categoryArray = empty($categoriesString) ? []:explode(',', $categoriesString);
foreach($categoryArray as $array){
$categorySearch .= 'categories.id[]='. (int)$array.'&';
}
$categorySearch = rtrim($categorySearch, '&');
}
$name = empty($request->query->get('name')) !== true ? $request->query->get('name') : null;
$city = empty($request->query->get('city')) !== true ? $request->query->get('city'): null;
$state = empty($request->query->get('state')) !== true ? $request->query->get('state'): null;
$address = empty($request->query->get('address')) !== true ? $request->query->get('address'): null;
$neighborhood = empty($request->query->get('neighborhood')) !== true ? $request->query->get('neighborhood'): null;
$categoryId = empty($request->query->get('categoryId')) !== true ? (int) $request->query->get('categoryId') : null ;
$attractions = $this->attractionService->search($name, $city, $state, $address, $neighborhood, $categorySearch, $page);
$attractions = json_decode($attractions->getContent(), true);
$paginationAttraction = $attractions['hydra:view'];
$pagination = [];
if (isset($paginationAttraction['hydra:first'])){
$pagination['first'] = explode('page=',$paginationAttraction['hydra:first'])[1];
$pagination['last'] = explode('page=',$paginationAttraction['hydra:last'])[1];
}
$currentUrl = $this->requestStack->getCurrentRequest()->getUri();
// Supprimez les paramètres de l'URL pour l'instant
list($urlWithoutParams, $params) = explode('?', $currentUrl, 2);
// Décodez la partie des paramètres
$decodedParams = rawurldecode($params);
// Reconstruisez l'URL avec les paramètres décodés
$currentUrl = $urlWithoutParams . '?' . $decodedParams;
return $this->render('frontend/search/search.html.twig', [
'name' => $name,
'city' => $city,
'categoryArray' => (array) $categoryArray,
'categories' => $categories,
'attractions' =>$attractions['hydra:member'],
'page' => $page,
'pagination' => $pagination,
'currentUrl' => $currentUrl,
"address" => $address
]);
}
}