<?php

declare(strict_types=1);

namespace App\Repository;

use App\Entity\Inscription;
use App\Entity\InscriptionParcours;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;

/** @extends ServiceEntityRepository<InscriptionParcours> */
final class InscriptionParcoursRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, InscriptionParcours::class);
    }

    /** @return list<InscriptionParcours> */
    public function findActiveByInscription(Inscription $inscription): array
    {
        return $this->createQueryBuilder('parcours')
            ->leftJoin('parcours.anneeScolaire', 'annee')->addSelect('annee')
            ->leftJoin('parcours.sectionFinale', 'sectionFinale')->addSelect('sectionFinale')
            ->leftJoin('parcours.niveauFinal', 'niveauFinal')->addSelect('niveauFinal')
            ->leftJoin('parcours.classeFinale', 'classeFinale')->addSelect('classeFinale')
            ->leftJoin('parcours.sectionSouhaitee', 'sectionSouhaitee')->addSelect('sectionSouhaitee')
            ->leftJoin('parcours.niveauSouhaite', 'niveauSouhaite')->addSelect('niveauSouhaite')
            ->leftJoin('parcours.classeSouhaitee', 'classeSouhaitee')->addSelect('classeSouhaitee')
            ->andWhere('parcours.inscription = :inscription')
            ->andWhere('parcours.actif = :active')
            ->setParameter('inscription', $inscription)
            ->setParameter('active', true)
            ->orderBy('parcours.principal', 'DESC')
            ->addOrderBy('parcours.ordre', 'ASC')
            ->addOrderBy('parcours.id', 'ASC')
            ->getQuery()
            ->getResult();
    }
}
