<?php
declare(strict_types=1);

require_once __DIR__ . '/admin_bootstrap.php';

$pdo = admin_get_pdo();
admin_require_auth($pdo);

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

if ($fileId <= 0 && $id <= 0) {
    http_response_code(400);
    header('Content-Type: text/plain; charset=utf-8');
    echo 'Nieprawidłowe ID pliku';
    exit;
}

try {
    $row = null;

    if ($fileId > 0) {
        $stmt = $pdo->prepare('SELECT file_name, file_mime, file_size, file_data FROM admin_task_files WHERE id = :id LIMIT 1');
        $stmt->execute([':id' => $fileId]);
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
    } else {
        $stmt = $pdo->prepare('SELECT file_name, file_mime, file_size, file_data FROM admin_tasks WHERE id = :id LIMIT 1');
        $stmt->execute([':id' => $id]);
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
    }

    if (!$row || empty($row['file_data'])) {
        http_response_code(404);
        header('Content-Type: text/plain; charset=utf-8');
        echo 'Brak pliku';
        exit;
    }

    $name = (string)($row['file_name'] ?? 'plik');
    $mime = (string)($row['file_mime'] ?? 'application/octet-stream');

    header('Content-Type: ' . $mime);
    header('Content-Disposition: attachment; filename="' . str_replace('"', '', $name) . '"');
    if (!empty($row['file_size'])) {
        header('Content-Length: ' . (string)$row['file_size']);
    }

    // PDO może zwrócić BLOB jako string
    echo $row['file_data'];
    exit;
} catch (Throwable $e) {
    http_response_code(500);
    header('Content-Type: text/plain; charset=utf-8');
    echo 'Błąd pobierania pliku';
    exit;
}
