<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
class IndexController extends AbstractController
{
#[Route('/', name: 'app_home')]
public function index(): Response
{
// Récupérer les derniers numéros du JO
$derniersNumeros = [
// Exemple de données - à remplacer par votre logique métier
['id' => 1, 'numero' => '2026-015', 'datePublication' => new \DateTime('2026-03-01'), 'nbActes' => 12],
['id' => 2, 'numero' => '2026-014', 'datePublication' => new \DateTime('2026-02-25'), 'nbActes' => 8],
['id' => 3, 'numero' => '2026-013', 'datePublication' => new \DateTime('2026-02-20'), 'nbActes' => 15],
['id' => 4, 'numero' => '2026-012', 'datePublication' => new \DateTime('2026-02-15'), 'nbActes' => 10],
];
$stats = [
'nombreActes' => 1250,
'nombreNumeros' => 45,
'nombreAbonnes' => 8,
];
return $this->render('index/index.html.twig', [
'derniersNumeros' => $derniersNumeros,
'stats' => $stats,
]);
}
#[Route('/search', name: 'app_search')]
public function search(Request $request): Response
{
$query = $request->query->get('q', '');
$institution = $request->query->get('institution', '');
$period = $request->query->get('period', '');
$type = $request->query->get('type', '');
$page = $request->query->getInt('page', 1);
// Simulation de résultats - à remplacer par votre logique de recherche
$results = [];
$isPremium = false; // À déterminer selon l'abonnement de l'utilisateur
if ($query) {
$results = [
[
'id' => 1,
'type' => 'loi',
'numero' => '2026-015/AU',
'titre' => 'Loi portant modernisation du Journal Officiel',
'resume' => 'Cette loi établit les nouvelles dispositions pour la publication numérique des textes officiels...',
'institution' => 'Assemblée nationale',
'datePublication' => new \DateTime('2026-03-01'),
'relevance' => 0.95,
'extrait' => 'Article 1 : Le Journal Officiel de l\'Union des Comores est désormais publié sous format numérique...'
],
// Ajoutez d'autres résultats
];
}
return $this->render('search/index.html.twig', [
'query' => $query,
'institution' => $institution,
'period' => $period,
'type' => $type,
'results' => $results,
'isPremium' => $isPremium,
'currentPage' => $page,
'totalPages' => 1,
]);
}
#[Route('/chatbot/send', name: 'app_chatbot_send', methods: ['POST'])]
public function chatbotSend(Request $request): JsonResponse
{
$data = json_decode($request->getContent(), true);
$message = $data['message'] ?? '';
// Logique IA pour répondre aux questions
$response = $this->processAIChat($message);
return $this->json([
'success' => true,
'response' => $response
]);
}
private function processAIChat(string $message): string
{
$message = strtolower($message);
// Logique simple de réponse - à remplacer par une véritable intégration IA
if (str_contains($message, 'bonjour') || str_contains($message, 'salut')) {
return "Bonjour ! Je suis Ibunas.IA, votre assistant pour le Journal Officiel des Comores. Je peux vous aider à rechercher des textes juridiques, des annonces légales, ou vous renseigner sur nos services d'abonnement.";
}
if (str_contains($message, 'recherche') || str_contains($message, 'trouver')) {
return "Pour effectuer une recherche, utilisez notre barre de recherche en haut de page. Vous pouvez filtrer par institution émettrice, période et type d'acte. Les abonnés Premium bénéficient d'une recherche enrichie par IA dans le contenu des textes.";
}
if (str_contains($message, 'abonnement') || str_contains($message, 'prix')) {
return "Notre offre d'abonnement Standard est à 50 000 KMF/an et offre l'accès aux textes isolés de moins de 5 ans. L'offre Premium à 90 000 KMF/an donne accès à tous les textes archivés, à la recherche enrichie par IA et aux alertes personnalisées.";
}
if (str_contains($message, 'publication') || str_contains($message, 'annonce')) {
return "Pour publier une annonce légale, créez un compte annonceur sur notre plateforme. Vous pourrez ensuite déposer votre document, recevoir un devis automatique et effectuer le paiement en ligne via Mobile Money.";
}
// Réponse par défaut
return "Je vous remercie pour votre question. Pour vous aider au mieux, pourriez-vous préciser votre demande ? Je peux vous assister pour :\n- Rechercher des textes juridiques\n- Publier une annonce légale\n- Vous abonner au Journal Officiel\n- Consulter les archives\n- Obtenir des informations sur nos services";
}
}