<?php
namespace Medienreaktor\Products\Domain\Repository;

use GeorgRinger\News\Database\QueryGenerator;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Query\QueryBuilder;
use TYPO3\CMS\Core\Utility\GeneralUtility;

/***
 *
 * This file is part of the "Products" Extension for TYPO3 CMS.
 *
 * For the full copyright and license information, please read the
 * LICENSE.txt file that was distributed with this source code.
 *
 *  (c) 2017 Daniel Kestler &lt;daniel.kestler@medienreaktor&gt;, medienreaktor GmbH
 *
 ***/

/**
 * The repository for ProductGroups
 */
class ProductGroupRepository extends \TYPO3\CMS\Extbase\Persistence\Repository
{
    public function findAll() {
        $query = $this->createQuery();
        $query->getQuerySettings()->setRespectStoragePage(FALSE);
        return $query->execute();
    }

    public function findByPidRecursively($pid, $languageUid = 0) {
        $queryGenerator = GeneralUtility::makeInstance(QueryGenerator::class);
        $rootline = $queryGenerator->getTreeList($pid, 9999, 0, 'hidden = 0 AND deleted = 0');
        $rootlineArray = explode(',', $rootline);

        $query = $this->createQuery();
        $query->getQuerySettings()->setStoragePageIds($rootlineArray);
        $query->getQuerySettings()->setLanguageUid($languageUid);
//        $query->getQuerySettings()->setLanguageMode('strict');

        return $query->execute();
    }

    public function findCategoriesById($id) {
        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_category_record_mm');

        $languageUid = $GLOBALS["TYPO3_REQUEST"]->getAttribute("language")->getLanguageId() ?? -1;

        $categories = $queryBuilder->select('uid_local')
            ->from("sys_category_record_mm")
            ->join(
                'sys_category_record_mm',
                'sys_category',
                'sys_category',
                $queryBuilder->expr()->eq('sys_category.uid', $queryBuilder->quoteIdentifier('uid_local'))
            )
            ->andWhere(
                $queryBuilder->expr()->eq("tablenames", $queryBuilder->createNamedParameter("tx_products_domain_model_productgroup")),
                $queryBuilder->expr()->eq("fieldname", $queryBuilder->createNamedParameter("categories")),
                $queryBuilder->expr()->eq("uid_foreign", $queryBuilder->createNamedParameter($id)),
            )->orderBy("sorting_foreign", "ASC")->executeQuery();

        $idList = [];

        while ($category = $categories->fetchAssociative()) {
            // Do something with that single row
            $idList[] = $category['uid_local'];
        }

        return $idList;
    }
}
