<?php
declare(strict_types=1);

/* Dynamischer Platzhalter: bewusst ohne bootstrap.php. Dieses bindet den
   Webseitenkopf ein und würde ein SVG dadurch zu einer HTML-Seite machen. */
$config = is_file(__DIR__ . '/config/config.php') ? require __DIR__ . '/config/config.php' : [];

$primary = '#126e82';
$accent = '#e3ebee';
try {
    $database = (array)($config['database'] ?? []);
    $prefix = (string)($database['prefix'] ?? 'triptale_');
    if (!preg_match('/^[A-Za-z][A-Za-z0-9_]*$/', $prefix)) { throw new RuntimeException('Invalid prefix'); }
    $pdo = new PDO('mysql:host=' . (string)$database['host'] . ';dbname=' . (string)$database['name'] . ';charset=' . (string)($database['charset'] ?? 'utf8mb4'), (string)$database['user'], (string)$database['password'], [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
    $settings = $pdo->query('SELECT setting_key, setting_value FROM ' . $prefix . "settings WHERE setting_key IN ('site_primary_color','site_accent_color')")->fetchAll(PDO::FETCH_KEY_PAIR);
    $candidatePrimary = strtolower((string)($settings['site_primary_color'] ?? ''));
    $candidateAccent = strtolower((string)($settings['site_accent_color'] ?? ''));
    if (preg_match('/^#[0-9a-f]{6}$/', $candidatePrimary)) { $primary = $candidatePrimary; }
    if (preg_match('/^#[0-9a-f]{6}$/', $candidateAccent)) { $accent = $candidateAccent; }
} catch (Throwable $exception) {
    // Vor der ersten Einrichtung bleiben die sicheren Standardfarben sichtbar.
}

$profile = (string)($_GET['type'] ?? 'image') === 'profile';
header('Content-Type: image/svg+xml; charset=UTF-8');
header('Cache-Control: no-store, max-age=0');
if ($profile) {
    /* Transparente Ecken und ein Clipping: Der Avatar bleibt rund, die Figur
       kann niemals über seinen Kreis hinausreichen. */
    echo '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 320" role="img" aria-label="TripTale">'
        . '<defs><clipPath id="avatar"><circle cx="160" cy="160" r="160"/></clipPath></defs>'
        . '<g clip-path="url(#avatar)"><circle cx="160" cy="160" r="160" fill="' . $accent . '"/>'
        . '<circle cx="160" cy="112" r="52" fill="' . $primary . '" opacity=".88"/>'
        . '<path d="M0 320V292h62c18-72 67-108 98-108s80 36 98 108h62v28z" fill="' . $primary . '" opacity=".88"/></g>'
        . '</svg>';
    exit;
}

/* Querformat wie ein Foto: Dadurch entstehen in den Bildboxen keine Seitenstreifen. */
echo '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 300" preserveAspectRatio="xMidYMid slice" role="img" aria-label="TripTale">'
    . '<rect width="480" height="300" rx="24" fill="' . $accent . '"/>'
    . '<path d="M28 248 148 134l77 69 74-85 153 130v26H28z" fill="' . $primary . '" opacity=".88"/>'
    . '<circle cx="334" cy="76" r="28" fill="' . $primary . '" opacity=".88"/>'
    . '</svg>';
