<?php

namespace App\Controller\Admin;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Requirement\Requirement;
use Symfony\Component\Routing\Attribute\Route;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\String\Slugger\AsciiSlugger;

use App\Entity\Genre;
use App\Form\GenreType;
use App\Repository\GenreRepository;

final class GenreController extends AbstractController
{
    /*
     * Lister tous les genres
     */
    #[Route('/admin/genre', name: 'app_admin_genre', methods: ['GET'])]
    public function index(GenreRepository $repository): Response
    {
        $genres = $repository->findAll();

        return $this->render('admin/genre/index.html.twig', [
            'genres' => $genres,
        ]);
    }

    /*
     * Supprimer un genre
     */
    #[Route('/admin/genre/{id}/delete', name: 'app_admin_genre_delete', requirements: ['id' => Requirement::UUID_V7], methods: ['GET'])]
    public function delete(?Genre $genre, EntityManagerInterface $manager): Response
    {
        $manager->remove($genre);
        $manager->flush();
        $this->addFlash('success', 'Genre supprimé avec succès.');
        return $this->redirectToRoute('app_admin_genre');
    }

    /* 
     * Modifier un genre
     */
    #[Route('/admin/genre/{id}/edit', name: 'app_admin_genre_edit', requirements: ['id' => Requirement::UUID_V7], methods: ['GET', 'POST'])]
    public function edit(?Genre $genre, Request $request, EntityManagerInterface $manager): Response
    {
        $form = $this->createForm(GenreType::class, $genre);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            // Aucun slug n'a été proposé par l'utilisateur
            if (!$form->get('slug')->getData()) {
                $slugger = new AsciiSlugger('fr_FR');
                $genre->setSlug($slugger->slug(strtolower($genre->getGenre())));
            }
            $manager->persist($genre);
            $manager->flush();

            $this->addFlash('success', 'Genre ajouté à la base de données avec succès.');
            return $this->redirectToRoute('app_admin_genre');
        }

        return $this->render('admin/genre/edit.html.twig', [
            'form' => $form,
            'genre' => $genre,
        ]);
    }

    /* 
     * Ajouter un genre
     */
    #[Route('/admin/genre/add', name: 'app_admin_genre_add', methods: ['GET', 'POST'])]
    public function add(Request $request, EntityManagerInterface $manager): Response
    {
        $genre = new Genre();
        $form = $this->createForm(GenreType::class, $genre);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            // Aucun slug n'a été proposé par l'utilisateur
            if (!$form->get('slug')->getData()) {
                $slugger = new AsciiSlugger('fr_FR');
                $genre->setSlug($slugger->slug(strtolower($genre->getGenre())));
            }
            $manager->persist($genre);
            $manager->flush();

            $this->addFlash('success', 'Genre ajouté à la base de données avec succès.');
            return $this->redirectToRoute('app_admin_genre');
        }

        return $this->render('admin/genre/edit.html.twig', [
            'form' => $form,
        ]);
    }
}

