<?php
require_once "functions.php";

if (session_status() !== PHP_SESSION_ACTIVE) session_start();
// Comprobar sesión
if (!isset($_SESSION['id_usuario'])) {
    http_response_code(403);
    die("Acceso denegado");
}

$id_empleado = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
$archivo = filter_input(INPUT_GET, 'f', FILTER_SANITIZE_SPECIAL_CHARS);
$nomina = isset($_GET['n']) && $_GET['n'] === 'true';

if (!$id_empleado || !$archivo) {
    http_response_code(400);
    die("Faltan parámetros");
}

// Comprobar permisos
$puede_ver = false;

if ($_SESSION['tipo_usuario'] === 'admin' || $_SESSION['tipo_usuario'] === 'dev' || $_SESSION['tipo_usuario'] === 'inspector') {
    $puede_ver = true;
} elseif ($_SESSION['tipo_usuario'] === 'empleado') {
    if ($_SESSION['id_empleado'] == $id_empleado) {
        $puede_ver = true;
    }
}

if (!$puede_ver) {
    http_response_code(403);
    die("No tienes permisos para ver este archivo");
}

// Construir ruta
// Determinar ruta base usando validación similar a subir_documento.php
// Sin embargo, sabemos que documents está en la raiz relativa a app/
// app/ver_archivo.php -> ../documents
$baseDir = __DIR__ . '/../documents/';
$subFolder = $nomina ? 'nominas/' : '';
$filePath = $baseDir . $id_empleado . '/' . $subFolder . $archivo;

// Evitar Traversal path attack
$realBase = realpath($baseDir . $id_empleado . '/' . $subFolder);
$realPath = realpath($filePath);

if ($realPath === false || strpos($realPath, $realBase) !== 0 || !file_exists($filePath)) {
    http_response_code(404);
    die("Archivo no encontrado");
}

// Servir archivo
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($filePath) ?: 'application/octet-stream';

header('Content-Type: ' . $mime);
header('Content-Length: ' . filesize($filePath));

// Si es para descarga o inline
// Para imágenes y pdfs puede ser inline, para otros attachment
$ext = strtolower(pathinfo($filePath, PATHINFO_EXTENSION));
$inlineExts = ['pdf', 'jpg', 'jpeg', 'png', 'gif', 'webp', 'txt'];
$disposition = in_array($ext, $inlineExts) ? 'inline' : 'attachment';

// Si se solicita explicitamente la descarga forzada (?d=1)
if (isset($_GET['d']) && $_GET['d'] == '1') {
    $disposition = 'attachment';
}

header('Content-Disposition: ' . $disposition . '; filename="' . basename($filePath) . '"');
readfile($filePath);
exit;
