<?php
declare(strict_types=1);
/*
* This file is part of the ArtHotel Naquera website.
*
* For the full copyright and license information,
* please read the LICENSE.md file that was distributed with this source code.
*
* Copyright (c) 2023.
*/
namespace App\Controller;
use App\Provider\FacilityProvider;
use App\Provider\MainPageProvider;
use App\Provider\NewsPostProvider;
use App\Provider\PlaceProvider;
use App\Provider\PlacesProvider;
use App\Provider\RoomListProvider;
use App\Provider\RoomProvider;
use App\Service\Data\DataProcessor;
use App\Service\Data\DataProvider;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
#[Route('/{_locale}', requirements: ['_locale' => 'en|es|ru'])]
class DefaultController extends AbstractController
{
public function __construct(
private readonly DataProvider $dataProvider,
private readonly DataProcessor $dataProcessor
) {
}
#[Route('/', name: 'index')]
public function index(Request $request): Response
{
$result = $this->dataProvider->provide($request, MainPageProvider::class);
return $this->render('templates/index.html.twig', $result);
}
#[Route('/rooms', name: 'rooms')]
public function rooms(Request $request): Response
{
$roomList = $this->dataProvider->provide($request, RoomListProvider::class);
return $this->render('templates/rooms.html.twig', $roomList);
}
#[Route('/rooms/{roomId}', name: 'room')]
public function room(Request $request): Response
{
$room = $this->dataProvider->provide($request, RoomProvider::class);
$roomList = $this->dataProvider->provide($request, RoomListProvider::class);
return $this->render('templates/room.html.twig', [...$room, ...$roomList]);
}
#[Route('/contacts', name: 'contacts')]
public function contacts(Request $request): Response
{
return $this->render('templates/contacts.html.twig', [
]);
}
#[Route('/about-us', name: 'about')]
public function aboutUs(Request $request): Response
{
return $this->render('templates/about.html.twig', [
]);
}
#[Route('/gallery', name: 'gallery')]
public function gallery(Request $request): Response
{
return $this->render('templates/gallery.html.twig', [
]);
}
#[Route('/facilities', name: 'facilities')]
public function facilities(Request $request): Response
{
return $this->render('templates/facilities.html.twig', [
]);
}
#[Route('/facilities/{facilityId}', name: 'facility')]
public function facility(Request $request): Response
{
$result = $this->dataProvider->provide($request, FacilityProvider::class);
return $this->render('templates/facility.html.twig', $result);
}
#[Route('/places/{slug}', name: 'place')]
public function place(Request $request): Response
{
$place = $this->dataProvider->provide($request, PlaceProvider::class);
$places = $this->dataProvider->provide($request, PlacesProvider::class);
return $this->render('templates/place.html.twig', [...$place, ...$places]);
}
#[Route('/nearby/outdoor', name: 'nearby_outdoor')]
public function nearByOutdoor(Request $request): Response
{
return $this->render('templates/nearby_outdoor.html.twig', [
]);
}
#[Route('}/nearby/city', name: 'nearby_city')]
public function nearByCity(Request $request): Response
{
return $this->render('templates/nearby_city.html.twig', [
]);
}
#[Route('/nearby/food', name: 'nearby_food')]
public function nearByFood(Request $request): Response
{
return $this->render('templates/nearby_food.html.twig', [
]);
}
#[Route('/blog/{slug}', name: 'blog_post')]
public function blogPost(Request $request): Response
{
$result = $this->dataProvider->provide($request, NewsPostProvider::class);
if (!$result) {
// $this->redirectToRoute('index');
}
return $this->render('templates/blog_post.html.twig', $result);
}
#[Route('/booking', name: 'booking')]
public function booking(Request $request): Response
{
return $this->render('templates/booking.html.twig', [
]);
}
}