<?php

declare(strict_types=1);

/*
 * Chill is a software for social workers
 *
 * For the full copyright and license information, please view
 * the LICENSE file that was distributed with this source code.
 */

namespace Chill\MainBundle\Tests\DependencyInjection;

use Chill\MainBundle\DependencyInjection\Configuration;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\DependencyInjection\ContainerBuilder;

/**
 * @internal
 *
 * @coversNothing
 */
class ConfigurationTest extends TestCase
{
    public function testTopBannerConfiguration(): void
    {
        $containerBuilder = new ContainerBuilder();
        $configuration = new Configuration([], $containerBuilder);
        $processor = new Processor();

        // Test with top_banner configuration
        $config = [
            'chill_main' => [
                'top_banner' => [
                    'text' => [
                        'fr' => 'Vous travaillez actuellement avec la version de pré-production de Chill.',
                        'nl' => 'Je werkte momenteel in de pré-productie versie van Chill.',
                    ],
                    'color' => 'white',
                    'background-color' => 'red',
                ],
            ],
        ];

        $processedConfig = $processor->processConfiguration($configuration, $config);

        self::assertArrayHasKey('top_banner', $processedConfig);
        self::assertArrayHasKey('text', $processedConfig['top_banner']);
        self::assertArrayHasKey('fr', $processedConfig['top_banner']['text']);
        self::assertArrayHasKey('nl', $processedConfig['top_banner']['text']);
        self::assertSame('white', $processedConfig['top_banner']['color']);
        self::assertSame('red', $processedConfig['top_banner']['background_color']);
    }

    public function testTopBannerConfigurationOptional(): void
    {
        $containerBuilder = new ContainerBuilder();
        $configuration = new Configuration([], $containerBuilder);
        $processor = new Processor();

        // Test without top_banner configuration
        $config = [
            'chill_main' => [],
        ];

        $processedConfig = $processor->processConfiguration($configuration, $config);

        // top_banner should not be present when not configured
        self::assertArrayNotHasKey('top_banner', $processedConfig);
    }

    public function testTopBannerWithMinimalConfiguration(): void
    {
        $containerBuilder = new ContainerBuilder();
        $configuration = new Configuration([], $containerBuilder);
        $processor = new Processor();

        // Test with minimal top_banner configuration (only text)
        $config = [
            'chill_main' => [
                'top_banner' => [
                    'text' => [
                        'fr' => 'Test message',
                    ],
                ],
            ],
        ];

        $processedConfig = $processor->processConfiguration($configuration, $config);

        self::assertArrayHasKey('top_banner', $processedConfig);
        self::assertArrayHasKey('text', $processedConfig['top_banner']);
        self::assertSame('Test message', $processedConfig['top_banner']['text']['fr']);
        self::assertNull($processedConfig['top_banner']['color']);
        self::assertNull($processedConfig['top_banner']['background_color']);
    }
}
