<?php

declare(strict_types=1);

use App\Framework\DI\DefaultContainer;
use App\Framework\Http\ControllerRequestFactory;
use App\Framework\Logging\DefaultLogger;
use App\Framework\Reflection\ReflectionProvider;
use App\Framework\Router\ParameterProcessor;

describe('ParameterProcessor Debug', function () {
    test('debug parameter processing for filename parameter', function () {
        // Mock dependencies
        $container = $this->createMock(DefaultContainer::class);
        $requestFactory = $this->createMock(ControllerRequestFactory::class);
        $logger = $this->createMock(DefaultLogger::class);
        $reflectionProvider = $this->createMock(ReflectionProvider::class);

        $processor = new ParameterProcessor($container, $requestFactory, $logger, $reflectionProvider);

        // Simulate the parameter data that would come from UnifiedRouteVisitor
        $params = [
            [
                'name' => 'filename',
                'type' => 'string',
                'isBuiltin' => true,
                'hasDefault' => false,
                'default' => null,
                'isOptional' => false,
                'attributes' => [],
            ],
        ];

        // Simulate the query params that would come from DynamicRoute->paramValues
        $queryParams = [
            'filename' => 'test-image.jpg',
        ];

        // Erwartung: filename sollte 'test-image.jpg' sein, nicht null
        $result = $processor->prepareParameters($params, $queryParams);

        expect($result)->toHaveCount(1);
        expect($result[0])->toBe('test-image.jpg');
        expect($result[0])->not->toBeNull();
    });

    test('debug parameter processing when parameter name missing from queryParams', function () {
        $container = $this->createMock(DefaultContainer::class);
        $requestFactory = $this->createMock(ControllerRequestFactory::class);
        $logger = $this->createMock(DefaultLogger::class);
        $reflectionProvider = $this->createMock(ReflectionProvider::class);

        $processor = new ParameterProcessor($container, $requestFactory, $logger, $reflectionProvider);

        $params = [
            [
                'name' => 'filename',
                'type' => 'string',
                'isBuiltin' => true,
                'hasDefault' => false,
                'default' => null,
                'isOptional' => false,
                'attributes' => [],
            ],
        ];

        // Empty queryParams - das ist wahrscheinlich unser Problem
        $queryParams = [];

        // Das wird null zurückgeben - das ist der Bug!
        $result = $processor->prepareParameters($params, $queryParams);

        expect($result)->toHaveCount(1);
        expect($result[0])->toBeNull(); // Das ist der aktuelle Bug

        // Debug: Show what's happening
        error_log('Parameter processing with empty queryParams - result: ' . json_encode($result));
    });

    test('debug how DynamicRoute paramValues should be populated', function () {
        // Test wie paramValues in DynamicRoute gesetzt werden sollten
        // Das sollte von HttpRouter oder RouteDispatcher gemacht werden

        expect(true)->toBeTrue(); // Placeholder test
    });
});
