<?php declare(strict_types=1);

/*
 * This file is part of the Rapsys AirBundle package.
 *
 * (c) Raphaël Gertz <symfony@rapsys.eu>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Rapsys\AirBundle\Repository;

use Doctrine\ORM\Query\ResultSetMapping;

/**
 * SlotRepository
 */
class SlotRepository extends Repository {
	/**
	 * Find slots with translated title
	 *
	 * @return array The slots id keyed by translated title
	 */
	public function findAllWithTranslatedTitle(): array {
		//Set the request from quoted table name
		//XXX: this allow to make this code table name independent
		$req = 'SELECT s.id, s.title FROM RapsysAirBundle:Slot AS s';

		//Replace bundle entity name by table name
		$req = str_replace($this->tableKeys, $this->tableValues, $req);

		//Get result set mapping instance
		//XXX: DEBUG: see ../blog.orig/src/Rapsys/BlogBundle/Repository/ArticleRepository.php
		$rsm = new ResultSetMapping();

		//Declare all fields
		//XXX: see vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Types.php
		//addScalarResult($sqlColName, $resColName, $type = 'string');
		$rsm->addScalarResult('id', 'id', 'integer')
			->addScalarResult('title', 'title', 'string')
			->addIndexByScalar('id');

		//Fetch result
		$res = $this->_em
			->createNativeQuery($req, $rsm)
			->getResult();

		//Init return
		$ret = [];

		//Process result
		foreach($res as $data) {
			//Get translated slot
			$slot = $this->translator->trans($data['title']);
			//Set data
			//XXX: ChoiceType use display string as key
			$ret[$slot] = $data['id'];
		}

		//Send result
		return $ret;
	}
}