<?php

namespace App\Controller\BackendAdmin;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

use Doctrine\ORM\EntityManagerInterface;

use App\Repository\GroupeCategorieRepository;

use App\Form\BackendAdmin\GroupeCategorieType;

use App\Service\UploaderService;

use App\Entity\GroupeCategorie;

#[Route('/backend/admin/groupcategorie')]
class GroupCategorieController extends AbstractController
{

    /**
     * @var GroupeCategorieRepository $groupeRepository
     */
    private $groupeRepository;

    /**
     * @var EntityManagerInterface $em
     */
    private $em;

    /**
     * @param GroupeCategorieRepository $groupeRepository
     * @param EntityManagerInterface $em
     * @return $this
     */
    public function __construct(
        GroupeCategorieRepository $groupeRepository,
        EntityManagerInterface $em
    ){
        $this->groupeRepository = $groupeRepository;
        $this->em = $em;
    }

    #[Route('/index', name: 'backend_admin_groupe_categorie_index')]
    public function index(Request $request): Response
    {   

        $groupe = new GroupeCategorie();

        $idGroupe = $request->get('idGroupe');
        if($idGroupe){
            $groupe = $this->groupeRepository->find($idGroupe);
        }
        
        $form = $this->createForm(GroupeCategorieType::class, $groupe);
        
        return $this->render('backend_admin/categorie/index_group.html.twig',['form'=>$form, 'groupe' => $groupe, 'groupes'=> $this->groupeRepository->findAll()]);
    }

    
    #[Route('/add', name: 'backend_admin_groupe_categorie_add')]
    public function add(Request $request, UploaderService $uploaderService): Response
    {
        $groupe = new GroupeCategorie();
		
		$form = $this->createForm(GroupeCategorieType::class, $groupe);

        $form->handleRequest($request);
        
		if ($form->isSubmitted() && $form->isValid()) {

            $image = $form->get('image')->getData();
            if ($image) {
                $directory = $this->getParameter('groupes_directory');
                $groupe->setImage($uploaderService->uploadFile($image, $directory));
            }
            
            $this->em->persist($groupe);
			$this->em->flush();
            
            $this->addFlash('success', ['title'=>'Success', 
                                        'message'=>"Le groupe <b>(".$groupe->getNom().")</b> a été bien ajouter."]);
		}
        return $this->redirectToRoute('backend_admin_groupe_categorie_index');
    }


    #[Route('/update/{id}', name: 'backend_admin_groupe_categorie_update')]
    public function update(Request $request, GroupeCategorie $groupe, UploaderService $uploaderService): Response
    {
        $form = $this->createForm(GroupeCategorieType::class, $groupe);

        $form->handleRequest($request);
		if ($form->isSubmitted() && $form->isValid()) {
			
            $image = $form->get('image')->getData();
            if ($image) {
                $directory = $this->getParameter('groupes_directory');
                $pathImage = $directory.$groupe->getImage();
                
                $groupe->setImage($uploaderService->uploadFile($image, $directory));
                if(is_file($pathImage)){
                    unlink($pathImage);
                }

            }

            $this->em->persist($groupe);
			$this->em->flush();

            $this->addFlash('success', ['title'=>'Success', 
                                        'message'=>"Le groupe <b>(".$groupe->getNom().")</b> a été bien modifier."]);
		}

        return $this->redirectToRoute('backend_admin_groupe_categorie_index');
    }


    #[Route('/remove_image/{id}', name: 'backend_admin_groupe_categorie_remove_image')]
    public function remove_image(GroupeCategorie $groupe): Response
    {
        $directory = $this->getParameter('groupes_directory');
        $pathImage = $directory.$groupe->getImage();
        if($groupe->getImage() && is_file($pathImage)){
            unlink($pathImage);
            $groupe->setImage(null);
            $this->em->persist($groupe);
			$this->em->flush();

            $this->addFlash('success', ['title'=>'Success', 
                                        'message'=>"l'image du groupe <b>(".$groupe->getNom().")</b> a été bien supprimer."]);
        }
        return $this->redirectToRoute('backend_admin_groupe_categorie_update',['id'=>$groupe->getId()]);
    }
    

}


//datatable.html.twig