<?php

declare(strict_types=1);

namespace WerkraumMedia\Events\Events\Controller;

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

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

    /**
     * @param QueryResultInterface<Region> $regions
     * @param array<Category> $categories
     * @param array<Category> $features
     */
    public function __construct(
        private readonly array $settings,
        private readonly array $search,
        private readonly DateDemand $demand,
        private readonly QueryResultInterface $regions,
        private readonly array $categories,
        private readonly array $features
    ) {
    }

    public function getSettings(): array
    {
        return $this->settings;
    }

    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;
    }

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

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