<?php

declare(strict_types=1);

namespace WerkraumMedia\Events\Events\Controller;

use TYPO3\CMS\Core\Pagination\PaginationInterface;
use TYPO3\CMS\Extbase\Persistence\Generic\QueryResult;
use WerkraumMedia\Events\Domain\Model\Date;
use WerkraumMedia\Events\Domain\Model\Dto\DateDemand;

final class DateListVariables
{
    private array $variables = [];

    public function __construct(
        private readonly array $search,
        private readonly DateDemand $demand,
        /**
         * @var QueryResult<Date>
         */
        private readonly QueryResult $dates,
        private readonly PaginationInterface $pagination
    ) {
    }

    public function getSearch(): array
    {
        return $this->search;
    }

    public function getDemand(): DateDemand
    {
        return $this->demand;
    }

    /**
     * @return QueryResult<Date>
     */
    public function getDates(): QueryResult
    {
        return $this->dates;
    }

    public function addVariable(string $key, mixed $value): void
    {
        $this->variables[$key] = $value;
    }

    public function getVariablesForView(): array
    {
        return [
            'search' => $this->search,
            'demand' => $this->demand,
            'dates' => $this->dates,
            'pagination' => $this->pagination,
            ...$this->variables,
        ];
    }
}