<?php
// admin/tools/pdf_edit.php

session_start();
require_once __DIR__ . '/../../includes/init.php';
require_once __DIR__ . '/../../auth/AuthController.php';
require_once __DIR__ . '/../../includes/core/ErrorLogger.php';

$auth = new AuthController();
if (!$auth->isLoggedIn()) {
    header('Location: ' . $adminLoginPath);
    exit;
}

$config = include __DIR__ . '/../../includes/config.php';
$db = Database::getInstance();

$title = "📝 PDF bearbeiten";
$info = '';
$error = '';

$pageHelp = renderPageHelp([
    'sections' => [
        [
            'heading' => 'Was macht diese Seite?',
            'items' => [
                'Hier änderst du die Stammdaten eines vorhandenen PDFs.',
                'Du steuerst damit Titel, Token-Nutzung und die weitere Verwendung des Downloads.',
            ],
        ],
        [
            'heading' => 'Was muss ich eingeben oder auswählen?',
            'items' => [
                'Passe den Titel an und lege bei Bedarf fest, ob ein neuer Token erzeugt werden soll.',
                'Setze nur die Werte neu, die für den Download wirklich geändert werden müssen.',
            ],
        ],
        [
            'heading' => 'Worauf sollte ich achten?',
            'items' => [
                'Ein neuer Token macht bestehende alte Links ungültig.',
                'Prüfe nach Änderungen, ob der ausgegebene Download-Link noch zum gewünschten Einsatz passt.',
            ],
        ],
    ],
    'warning' => 'Das Erneuern eines Tokens kann bestehende Download-Verweise unbrauchbar machen.',
]);

ob_start();

$pdf_id = isset($_GET['id']) ? (int)$_GET['id'] : 0;

try {
    $stmt = $db->prepare("SELECT * FROM pdf_downloads WHERE id = ?");
    $stmt->execute([$pdf_id]);
    ErrorLogger::logSqlSuccess("PDF-Datensatz geladen | table: pdf_downloads | context: " . json_encode(["pdf_id" => (int)$pdf_id], JSON_UNESCAPED_UNICODE));
    $pdf = $stmt->fetch();

    if (!$pdf) {
        $error = "PDF nicht gefunden.";
    } else {
        $stmt = $db->prepare("SELECT * FROM pdf_tokens WHERE pdf_id = ? ORDER BY created_at DESC LIMIT 1");
        $stmt->execute([$pdf_id]);
        $token_data = $stmt->fetch();

        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $title_input = $_POST['title'] ?? '';
            $valid_hours = (int)($_POST['valid_hours'] ?? 48);
            $renew_token = isset($_POST['renew_token']);

            if ($title_input) {
                $stmt = $db->prepare("UPDATE pdf_downloads SET title = ? WHERE id = ?");
                $stmt->execute([$title_input, $pdf_id]);
                ErrorLogger::logSqlSuccess("PDF-Titel aktualisiert | table: pdf_downloads | context: " . json_encode(["pdf_id" => (int)$pdf_id], JSON_UNESCAPED_UNICODE));
                ErrorLogger::log("PDF #$pdf_id Titel aktualisiert", 'INFO');

                if ($token_data) {
                    if ($renew_token) {
                        $new_token = bin2hex(random_bytes(16));
                        $stmt = $db->prepare("DELETE FROM pdf_tokens WHERE id = ?");
                        $stmt->execute([$token_data['id']]);
                    } else {
                        $new_token = $token_data['token'];
                        $stmt = $db->prepare("DELETE FROM pdf_tokens WHERE pdf_id = ?");
                        $stmt->execute([$pdf_id]);
                    }
                } else {
                    $new_token = bin2hex(random_bytes(16));
                }

                $valid_until = (new DateTime())->modify("+{$valid_hours} hours")->format('Y-m-d H:i:s');
                $stmt = $db->prepare("INSERT INTO pdf_tokens (pdf_id, token, valid_until) VALUES (?, ?, ?)");
                $stmt->execute([$pdf_id, $new_token, $valid_until]);
                ErrorLogger::logSqlSuccess("PDF-Token gespeichert | table: pdf_tokens | context: " . json_encode(["pdf_id" => (int)$pdf_id], JSON_UNESCAPED_UNICODE));
                ErrorLogger::log("Neuer Token für PDF #$pdf_id erstellt", 'INFO');

                $info = "✅ Änderungen gespeichert!";
                $pdf['title'] = $title_input;
                $token_data = ['token' => $new_token, 'valid_until' => $valid_until];
            } else {
                $error = "Titel darf nicht leer sein.";
            }
        }
    }
} catch (Exception $e) {
    ErrorLogger::logSqlError("Fehler beim Bearbeiten von PDF-Daten | table: pdf_downloads/pdf_tokens | error: " . $e->getMessage());
    $error = "Fehler: " . $e->getMessage();
    ErrorLogger::log("Fehler beim Bearbeiten von PDF #$pdf_id: {$e->getMessage()}", 'ERROR');
}
?>

<div class="page-header h2">📝 PDF bearbeiten</div>

<?= $pageHelp ?>

<?php if ($info): ?><div class="alert alert-success auto-dismiss"><?= htmlspecialchars($info) ?></div><?php endif; ?>
<?php if ($error): ?><div class="alert alert-danger auto-dismiss">❌ <?= htmlspecialchars($error) ?></div><?php endif; ?>

<?php if (!empty($pdf)): ?>
<form method="post" class="mt-4">
  <div class="mb-3">
    <label class="form-label">PDF-Titel</label>
    <input type="text" name="title" value="<?= htmlspecialchars($pdf['title']) ?>" class="form-control" required>
  </div>

  <div class="mb-3">
    <label class="form-label">Gültigkeit neu setzen (Stunden ab jetzt)</label>
    <input type="number" name="valid_hours" value="48" class="form-control" required>
  </div>

  <div class="form-check mb-3">
    <input class="form-check-input" type="checkbox" name="renew_token" id="renew_token">
    <label class="form-check-label" for="renew_token">
      Neuen Token erzeugen (alten ungültig machen)
    </label>
  </div>

  <button type="submit" class="btn btn-primary">Änderungen speichern</button>
</form>

<?php if ($token_data): ?>
  <hr>
  <p><strong>Platzhalter:</strong> <code>[download_pdf<?= $pdf_id ?>]</code></p>
  <p><strong>Aktueller Token:</strong> <code><?= htmlspecialchars($token_data['token']) ?></code></p>
  <p><strong>Gültig bis:</strong> <?= $token_data['valid_until'] ?></p>
  <p><strong>Download-Link:</strong><br>
    <code><?= $baseUrl ?>/download.php?token=<?= htmlspecialchars($token_data['token']) ?>&amp;rid=EMPFAENGER_ID</code>
  </p>
<?php endif; ?>
<?php endif; ?>

<script>
document.addEventListener('DOMContentLoaded', function () {
  setTimeout(() => {
    document.querySelectorAll('.auto-dismiss').forEach(el => {
      el.classList.add('fade');
      setTimeout(() => el.remove(), 1000);
    });
  }, 5000);
});
</script>

<?php
$pageContent = ob_get_clean();
include __DIR__ . '/../template.php';
