<?php

namespace App\Controller;

use App\Entity\Account;
use App\Entity\AccountResetPasswordRequest;
use App\Form\RequestPasswordConfirmType;
use App\Form\RequestPasswordRequestType;
use App\Repository\MembersRepository;
use App\Service\ResetPassword\Event\ResetPasswordConfirmEvent;
use App\Service\ResetPassword\Event\ResetPasswordEvent;
use Doctrine\ORM\EntityManagerInterface;
use Psr\EventDispatcher\EventDispatcherInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Twig\Environment;
use Vich\UploaderBundle\Templating\Helper\UploaderHelper;

class MembersController extends AbstractController
{

    #[Route(path: '/membres', name: 'app_members', options: ['sitemap' => true], methods: ['GET'])]
    public function index(MembersRepository $membersRepository,UploaderHelper $uploaderHelper): Response
    {
        // 1. Définir l'ordre de priorité des rôles pour les membres du bureau
        $roleOrder = [
            'President' => 1,
            'Tresorier' => 2,
            'Secretaire' => 3,
            'VicePresident' => 4,
            'TresorierAdjoint' => 5,
            'SecretaireAdjoint' => 6,
        ];

        $board_members_sorted = []; // Pour les membres du bureau (avec priorité)
        $regular_members = [];     // Pour les membres ayant le rôle "Membre"

        // Récupération de tous les membres actifs en une seule fois
        foreach ($membersRepository->findBy(['status' => 'actif'], ['id' => 'ASC']) as $member) {
            $role = $member->getRole();

            // Données communes pour chaque membre
            $memberData = [
                'pseudo' => $member->getPseudo(),
                'photo_url' => $uploaderHelper->asset($member, 'members'),
                'role' => $member->getRole(),
                'cosplayer' => $member->isCosplayer(),
                'crosscosplayer' => $member->isCrosscosplayer(),
                'trans' => $member->isTrans(),
                'orientation' => $member->getOrientation(),
            ];

            // 2. Filtrer et assigner la priorité
            if (isset($roleOrder[$role])) {
                // Membre du bureau : on ajoute la priorité
                $memberData['priority'] = $roleOrder[$role];
                $board_members_sorted[] = $memberData;
            } elseif ($role == "Membre") {
                // Membre régulier : on ajoute à la liste séparée
                $regular_members[] = $memberData;
            }
            // Les autres rôles sont ignorés
        }



        // 3. Trier les membres du bureau par ordre de priorité (croissant)
        usort($board_members_sorted, function ($a, $b) {
            // Utilise l'opérateur <=> pour une comparaison simple
            return $a['priority'] <=> $b['priority'];
        });

        // 4. Nettoyage : Supprimer la clé 'priority'
        foreach ($board_members_sorted as &$member) {
            unset($member['priority']);
        }
        unset($member); // Important de désactiver la référence

        // 5. Ne plus combiner : on passe les deux listes séparément au template

        return $this->render('members.twig',[
            'board_members' => $board_members_sorted, // Membres du bureau triés
            'regular_members' => $regular_members,     // Membres réguliers
        ]);
    }
}
