<?php declare(strict_types=1);

namespace App\Engine\Navigation;

/**
 * @extends  \Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository<Navigation>
 * @implements \App\Engine\Admin\AdminRepositoryInterface<Navigation>
 */
class NavigationRepository extends \Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository implements \App\Engine\Admin\AdminRepositoryInterface
{

    public function __construct(\Doctrine\Persistence\ManagerRegistry $registry)
    {
        parent::__construct($registry, Navigation::class);
    }

    public function loadAll(int $limit = null, int $offset = 0): array
    {
        return $this->createQueryBuilder("navigation")
            ->orderBy("navigation.id", "DESC")
            ->setFirstResult($offset)
            ->setMaxResults($limit)
            ->getQuery()
            ->getResult();
    }

    public function findByParentId(?int $parentId): array
    {
        $queryBuilder = $this->createQueryBuilder('navigation')
            ->leftJoin('navigation.parent', 'p');

        if ($parentId === null) {
            $queryBuilder
                ->where('p.id IS NULL');
        } else {
            $queryBuilder
                ->where('p.id = :parentId')
                ->setParameter('parentId', $parentId);
        }

        return $queryBuilder
            ->addOrderBy('navigation.section', 'DESC')
            ->addOrderBy('navigation.priority', 'ASC')
            ->getQuery()
            ->getResult();
    }

}
