<?php

namespace App\Controller;

use App\Entity\OnBoaringEpage;
use App\Form\EPageOnboard;
use App\Repository\AbonementsRepository;
use Cocur\Slugify\Slugify;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Uid\Uuid;

class PagesController extends AbstractController
{
    #[Route(path: '/pages', name: 'app_pages', options: ['sitemap' => false], methods: ['GET','POST'])]
    public function index(): Response
    {
        return $this->render('pages.twig',[
        ]);
    }

    #[Route(path: '/pages/discover', name: 'app_pages_discover', options: ['sitemap' => false], methods: ['GET','POST'])]
    public function discover(): Response
    {
        return $this->render('pages/prestation.twig',[
        ]);
    }
    #[Route(path: '/pages/onboaring', name: 'app_pages_onboaring', options: ['sitemap' => false], methods: ['GET','POST'])]
    public function onboaring(Request $request,AbonementsRepository $abonementsRepository,EntityManagerInterface $entityManager): Response
    {
        // Définir la liste des abonnements valides.
        $validAboDurations = ['1M', '2M', '3M', '6M', '12M'];

        // 1. Vérifier si le paramètre 'abo' est présent dans la requête.
        if (!$request->query->has('abo')) {
            // Si 'abo' n'est pas présent, rediriger vers la page de découverte ou de tarification.
            // J'utilise 'app_pages_discover' comme dans votre exemple initial.
            return $this->redirectToRoute('app_pages_discover');
        }

        $selectedAbo = $request->query->get('abo');

        // 2. Vérifier si la valeur de 'abo' est valide.
        if (!in_array($selectedAbo, $validAboDurations, true)) {
            // Si la valeur n'est pas valide, rediriger vers la page de découverte.
            return $this->redirectToRoute('app_pages_discover');
        }

        // --- DÉBUT DE LA LOGIQUE D'AJOUT EN SESSION ---
        $session = $request->getSession();

        // Vérifier si un UUID de panier (cartId) existe déjà en session
        if (!$session->has('cart_uuid')) {
            // Si non, générer un nouvel UUID V4 et le stocker
            $cartUuid = Uuid::v4()->toString();
            $session->set('cart_uuid', $cartUuid);

            // Initialiser le panier en session avec l'abonnement sélectionné
            $session->set('cart_items', [
                'subscription' => $selectedAbo,
                'uuid' => $cartUuid,
                // Vous pouvez ajouter d'autres informations ici (timestamp, etc.)
            ]);

        } else {
            // Si l'UUID existe déjà, on met juste à jour l'abonnement sélectionné
            // Si l'on suppose qu'il s'agit d'une mise à jour du choix dans le panier existant.
            $cartItems = $session->get('cart_items', []);
            $cartItems['subscription'] = $selectedAbo;
            $session->set('cart_items', $cartItems);
        }
        // --- FIN DE LA LOGIQUE D'AJOUT EN SESSION ---

        $onBoard = new OnBoaringEpage();
        $onBoard->setState("created");
        $onBoard->setUuid($session->get('cart_items')['uuid']);
        if($request->query->get('abo')== "1M")
            $onBoard->setAbos($abonementsRepository->findOneBy(['name'=>'Epage 1 Mois']));
        if($request->query->get('abo')== "2M")
            $onBoard->setAbos($abonementsRepository->findOneBy(['name'=>'Epage 2 Mois']));
        if($request->query->get('abo')== "3M")
            $onBoard->setAbos($abonementsRepository->findOneBy(['name'=>'Epage 3 Mois']));
        if($request->query->get('abo')== "6M")
            $onBoard->setAbos($abonementsRepository->findOneBy(['name'=>'Epage 6 Mois']));
        if($request->query->get('abo')== "12M")
            $onBoard->setAbos($abonementsRepository->findOneBy(['name'=>'Epage 12 Mois']));
        $onBoard->setUseDomain(false);
        // Exemple simple : afficher une page de confirmation avec l'abonnement sélectionné.
        $form = $this->createForm(EPageOnboard::class,$onBoard);
        $form->handleRequest($request);
        if($form->isSubmitted() && $form->isValid()){
            $onBoard->setBirdth($_POST['e_page_onboard']['birdth']);
            $s = new Slugify();
            $onBoard->setPageUrl($s->slugify($onBoard->getNameCosplayer()).".e-cosplay.fr");
            $avatar = $onBoard->getEpage()->getMimeType();
            if(str_contains($avatar, 'image')){
                $entityManager->persist($onBoard);
                $entityManager->flush();

                dd($onBoard);
            } else {
                return $this->redirectToRoute('app_pages_onboaring',['type'=>$request->get('type'),'errorFile'=>1]);
            }
        }
        return $this->render('pages/onboarding.twig', [
            'no_index' => true,
            'abo' => $selectedAbo,
            'onBoard' => $onBoard,
            'form' => $form->createView()
        ]);
    }
}
