<?php

namespace Wrm\Events\Events\Controller;

use TYPO3\CMS\Extbase\Domain\Model\Category;
use TYPO3\CMS\Extbase\Persistence\QueryResultInterface;
use Wrm\Events\Domain\Model\Dto\DateDemand;
use Wrm\Events\Domain\Model\Region;

class DateSearchVariables
{
    /**
     * @var array
     */
    private $search;

    /**
     * @var DateDemand
     */
    private $demand;

    /**
     * @var QueryResultInterface<Region>
     */
    private $regions;

    /**
     * @var array<Category>
     */
    private $categories;

    /**
     * @var array<Category>
     */
    private $features;

    /**
     * @var array
     */
    private $variables = [];

    /**
     * @param QueryResultInterface<Region> $regions
     */
    public function __construct(
        array $search,
        DateDemand $demand,
        QueryResultInterface $regions,
        array $categories,
        array $features
    ) {
        $this->search = $search;
        $this->demand = $demand;
        $this->regions = $regions;
        $this->categories = $categories;
        $this->features = $features;
    }

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

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

    /**
     * @return QueryResultInterface<Region>
     */
    public function getRegions(): QueryResultInterface
    {
        return $this->regions;
    }

    public function getCategories(): array
    {
        return $this->categories;
    }

    public function getFeatures(): array
    {
        return $this->features;
    }

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

    public function getVariablesForView(): array
    {
        return array_merge([
            'search' => $this->search,
            'demand' => $this->demand,
            'regions' => $this->regions,
            'categories' => $this->categories,
            'features' => $this->features,
        ], $this->variables);
    }
}