<?php 
 
namespace App\Controller; 
 
 
use Doctrine\ORM\EntityManagerInterface; 
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\Routing\Annotation\Route; 
use App\Form\Filters\ManageCountryFilter; 
use App\Repository\CountriesRepository; 
use App\Form\ManageCountryForm; 
use App\Entity\UserCountries; 
 
 
#[Route('/settings/manage-countries')] 
class ManageCountriesController extends AbstractController 
{ 
    #[Route('/', defaults: ['page' => '1'], methods: ['GET'], name: 'settings_manage_countries_index')] 
    #[Route('/page/{page<[1-9]\d*>}', methods: ['GET'], name: 'settings_manage_countries_index_paginated')] 
    #[Cache(smaxage: 10)] 
    public function index(Request $request,int $page,EntityManagerInterface $entityManager,CountriesRepository $countriesRepository): Response 
    { 
        $params = $request->query->all(); 
        $filter = []; 
 
        $filterForm = $this->createForm(ManageCountryFilter::class); 
         
        if(isset($params['countryName'])) { 
            $filterForm['countryName']->setData($params['countryName']); 
            $filter['countryName'] = $params['countryName']; 
        } 
        if(isset($params['countryCode'])) { 
            $filterForm['countryCode']->setData($params['countryCode']); 
            $filter['countryCode'] = $params['countryCode']; 
        } 
        if(isset($params['enable'])) { 
            $filterForm['enable']->setData($params['enable']); 
            $filter['enable'] = $params['enable']; 
        } 
 
        $data = $countriesRepository->adminPaginatorFetchAll($page, $filter); 
 
        return $this->render('manage-countries/index.html.twig', [ 
            'paginator' => $data, 
            'filter' => $filter, 
            'form' => $filterForm->createView(), 
        ]); 
    } 
 
    #[Route('/edit/{id}', name: 'edit_country', methods: ['GET', 'POST'])] 
    public function edit(Request $request, EntityManagerInterface $entityManager, UserCountries $countries){ 
        
        $form = $this->createForm(ManageCountryForm::class, $countries); 
        $form->handleRequest($request); 
     
        if ($form->isSubmitted() && $form->isValid()) { 
            $entityManager->persist($countries); 
            $entityManager->flush(); 
            $this->addFlash('success', 'Update successfully.'); 
            return $this->redirectToRoute('settings_manage_countries_index', [], Response::HTTP_SEE_OTHER); 
        } 
     
 
        return $this->renderForm('manage-countries/edit.html.twig', [ 
            'form' => $form, 
            'countries'=>$countries, 
        ]); 
    } 
 
    #[Route('/delete/{id}', name: 'delete_country', methods: ['POST','GET'])] 
    public function deleteUser(Request $request, EntityManagerInterface $entityManager, UserCountries $countries): Response 
    { 
        $redirectPage = $request->query->get('redirect_page'); 
        if ($this->isCsrfTokenValid('delete'.$countries->getCountryId(), $request->request->get('_token'))) { 
            if($request->isMethod('POST')){ 
                $countries->setIsDeleted(1); 
                $entityManager->persist($countries); 
                $entityManager->flush(); 
                $this->addFlash('error', 'Delete successfully.'); 
                if($request->request->get('redirect_page')){ 
                    return $this->redirectToRoute('settings_manage_countries_index_paginated', ['page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER); 
                } 
                return $this->redirectToRoute('settings_manage_countries_index', [], Response::HTTP_SEE_OTHER); 
            } 
        } 
        return $this->renderForm('manage-countries/_delete_form.html.twig', [ 
            'countries' => $countries, 
            'redirect_page' => $redirectPage, 
        ]); 
    } 
}