<?php

declare(strict_types=1);

require_once __DIR__ . '/../../vendor/autoload.php';

use App\Framework\Design\ComponentScanner;

$scanner = new ComponentScanner();

// Test with a simple CSS file
$testCss = <<<CSS
.card {
    background: white;
    padding: 1rem;
    border-radius: 8px;
}

.card:hover {
    transform: translateY(-2px);
}

.btn {
    background: blue;
    color: white;
    padding: 0.5rem 1rem;
}

.btn-primary {
    background: #3b82f6;
}

.sidebar {
    width: 250px;
    background: #f3f4f6;
}

.alert-success {
    background: green;
    color: white;
}
CSS;

// Write test CSS to a temporary file
$tempFile = __DIR__ . '/../tmp/test-components.css';
@mkdir(dirname($tempFile), 0777, true);
file_put_contents($tempFile, $testCss);

try {
    // Scan the test file
    $registry = $scanner->scanComponents([$tempFile]);

    echo "Total components found: " . $registry->getTotalComponents() . "\n\n";

    $components = $registry->getAllComponents();
    foreach ($components as $component) {
        echo "Component: " . $component->name . "\n";
        echo "  - Display Name: " . $component->getDisplayName() . "\n";
        echo "  - Category: " . $component->category->value . "\n";
        echo "  - Pattern: " . $component->pattern->value . "\n";
        echo "  - State: " . $component->state->value . "\n";
        echo "  - Selector: " . $component->selector . "\n";
        echo "\n";
    }

    // Now test with real CSS files
    echo "\n--- Scanning Real CSS Files ---\n\n";

    $cssFiles = [
        __DIR__ . '/../../resources/css/components/card.css',
        __DIR__ . '/../../resources/css/components/buttons.css',
        __DIR__ . '/../../resources/css/components/sidebar.css',
    ];

    $existingFiles = array_filter($cssFiles, 'file_exists');

    if (! empty($existingFiles)) {
        $realRegistry = $scanner->scanComponents($existingFiles);

        echo "Total components found in real files: " . $realRegistry->getTotalComponents() . "\n\n";

        $realComponents = $realRegistry->getAllComponents();
        foreach (array_slice($realComponents, 0, 10) as $component) {
            echo "Component: " . $component->name . "\n";
            echo "  - Display Name: " . $component->getDisplayName() . "\n";
            echo "  - Category: " . $component->category->value . "\n";
            echo "  - Pattern: " . $component->pattern->value . "\n";
            echo "  - File: " . basename($component->filePath) . "\n";
            echo "\n";
        }

        // Show category counts
        echo "\nCategory Distribution:\n";
        $categoryCounts = $realRegistry->getCategoryCounts();
        foreach ($categoryCounts as $category => $count) {
            if ($count > 0) {
                echo "  - $category: $count components\n";
            }
        }
    } else {
        echo "No real CSS files found to scan.\n";
    }

} catch (\Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
    echo "Trace: " . $e->getTraceAsString() . "\n";
} finally {
    // Clean up temp file
    @unlink($tempFile);
}
