<?php

declare(strict_types=1);

/**
 * Bootstrap Icons (MIT) lokal nachladen — holt einzelne Icon-SVGs und legt sie
 * minimiert unter public/assets/icons/<name>.svg ab (nur viewBox + Pfade,
 * Größe/Farbe steuert CSS über die .icon-Klasse bzw. currentColor).
 *
 * NUR CLI/Build — nie im Request-Pfad. Besucher laden ausschließlich die lokalen
 * SVGs (inline via icon()-Helper), niemals ein CDN.
 *
 * Aufruf:  php bin/icons-add.php pause-fill play-fill arrow-right ...
 * Icon-Namen siehe https://icons.getbootstrap.com (Dateiname ohne .svg).
 */
if (PHP_SAPI !== 'cli') {
    exit(1);
}

require dirname(__DIR__) . '/app/bootstrap.php';

const BI_VERSION = '1.11.3';
const BI_BASE = 'https://cdn.jsdelivr.net/npm/bootstrap-icons@' . BI_VERSION . '/icons/';

$names = array_slice($argv, 1);
if ($names === []) {
    fwrite(STDERR, "Usage: php bin/icons-add.php <icon-name> [<icon-name> ...]\n");
    exit(1);
}

$dir = PUBLIC_PATH . '/assets/icons';
if (!is_dir($dir) && !mkdir($dir, 0775, true) && !is_dir($dir)) {
    fwrite(STDERR, "Kann Verzeichnis nicht anlegen: {$dir}\n");
    exit(1);
}

$failed = 0;
foreach ($names as $name) {
    $name = basename(trim($name));
    if ($name === '' || !preg_match('/^[a-z0-9-]+$/', $name)) {
        fwrite(STDERR, "Übersprungen (ungültiger Name): {$name}\n");
        $failed++;
        continue;
    }

    $raw = @file_get_contents(BI_BASE . $name . '.svg');
    if ($raw === false || !str_contains($raw, '<svg')) {
        fwrite(STDERR, "Nicht gefunden: {$name}\n");
        $failed++;
        continue;
    }

    // Inneres SVG extrahieren und minimal neu aufbauen (currentColor erbt).
    $inner = preg_replace(['/.*?<svg[^>]*>/s', '#</svg>\s*$#s'], '', $raw);
    $svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">' . trim((string) $inner) . '</svg>' . "\n";

    file_put_contents($dir . '/' . $name . '.svg', $svg);
    echo "✓ {$name}\n";
}

exit($failed > 0 ? 1 : 0);
