<?php
// admin/tools/upload_pdf.php

// ✅ Session und Sicherheit
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;
}

$db = Database::getInstance();
$title = "📤 Neues PDF hochladen";
$info = '';
$error = '';

$pageHelp = renderPageHelp([
    'sections' => [
        [
            'heading' => 'Was macht diese Seite?',
            'items' => [
                'Hier lädst du ein neues PDF für geschützte Downloads hoch.',
                'Das Dokument kann danach über Platzhalter oder Download-Links verwendet werden.',
            ],
        ],
        [
            'heading' => 'Was muss ich eingeben oder auswählen?',
            'items' => [
                'Wähle die PDF-Datei und vergib einen verständlichen Titel.',
                'Lege fest, wie lange der erste erzeugte Token gültig sein soll.',
            ],
        ],
        [
            'heading' => 'Worauf sollte ich achten?',
            'items' => [
                'Lade nur die endgültige Datei hoch, die produktiv verwendet werden soll.',
                'Prüfe Dateiname, Inhalt und Gültigkeit vor dem Speichern.',
            ],
        ],
    ],
]);

ob_start();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $title_input = trim($_POST['title'] ?? '');
    $valid_hours = (int)($_POST['valid_hours'] ?? 48);
    $file = $_FILES['pdf_file'] ?? null;

    if ($file && $file['error'] === UPLOAD_ERR_OK && $title_input) {
        $filename = uniqid('pdf_', true) . '.pdf';
        $upload_path = __DIR__ . '/../../uploads/protected_pdfs/' . $filename;

        if (move_uploaded_file($file['tmp_name'], $upload_path)) {
            try {
                // 📦 PDF speichern
                $stmt = $db->prepare("INSERT INTO pdf_downloads (title, filename) VALUES (?, ?)");
                $stmt->execute([$title_input, $filename]);
                ErrorLogger::logSqlSuccess("PDF-Datensatz erstellt | table: pdf_downloads | context: " . json_encode(["filename" => $filename], JSON_UNESCAPED_UNICODE));
                ErrorLogger::log("PDF hochgeladen: $filename ($title_input)", 'INFO');

                $pdf_id = $db->lastInsertId();

                // 🔐 Token erzeugen
                $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, $token, $valid_until]);
                ErrorLogger::logSqlSuccess("PDF-Token erstellt | table: pdf_tokens | context: " . json_encode(["pdf_id" => (int)$pdf_id], JSON_UNESCAPED_UNICODE));

                ErrorLogger::log("Download-Token generiert für PDF #$pdf_id", 'INFO');

                $baseUrl = rtrim($config['url'], '/');
                $info = "✅ Upload erfolgreich! Platzhalter: [download_pdf$pdf_id]";
                $testlink = "$baseUrl/download.php?token=$token&amp;rid=EMPFAENGER_ID";
            } catch (Exception $e) {
                ErrorLogger::logSqlError("Fehler beim Speichern von PDF/Token | table: pdf_downloads/pdf_tokens | error: " . $e->getMessage());
                $error = 'Fehler beim Speichern: ' . $e->getMessage();
                ErrorLogger::log("PDF Upload Fehler: " . $e->getMessage(), 'ERROR');
            }
        } else {
            $error = "❌ Upload fehlgeschlagen beim Speichern der Datei!";
        }
    } else {
        $error = "❌ Ungültige Eingaben oder keine Datei!";
    }
}
?>

<div class="page-header h2">📤 Neues PDF hochladen</div>

<?= $pageHelp ?>

<?php if ($info): ?>
  <div class="alert alert-success auto-dismiss"><?= htmlspecialchars($info) ?></div>
  <div class="alert alert-secondary small">🔗 <strong>Test-Link:</strong> <?= htmlspecialchars($testlink) ?></div>
<?php elseif ($error): ?>
  <div class="alert alert-danger auto-dismiss"><?= htmlspecialchars($error) ?></div>
<?php endif; ?>

<form method="post" enctype="multipart/form-data" class="mt-4">
  <div class="mb-3">
    <label class="form-label">PDF-Titel</label>
    <input type="text" name="title" class="form-control" required>
  </div>

  <div class="mb-3">
    <label class="form-label">PDF-Datei</label>
    <input type="file" name="pdf_file" class="form-control" accept="application/pdf" required>
  </div>

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

  <button type="submit" class="btn btn-primary">Hochladen</button>
</form>

<script>
// Meldungen automatisch ausblenden
  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';
