<?php
/**
 * modules/estudiante/foto_carnet.php
 *
 * Proxy seguro para servir la foto de carnet del estudiante.
 * Compatible con archivos locales (uploads/...) y OneDrive (onedrive:...).
 *
 * Uso: <img src="foto_carnet.php?id=<?= $idEst ?>">
 */

require_once __DIR__ . '/../../config/app.php';
require_once __DIR__ . '/../../config/onedrive.php';
require_once __DIR__ . '/../../includes/OneDriveStorage.php';
require_once __DIR__ . '/../../includes/auth.php';
require_once __DIR__ . '/../../includes/functions.php';

// ── Verificar que haya sesión activa (cualquier rol) ──────────────────────
$user = currentUser();
if (!$user) {
    http_response_code(403);
    exit('Acceso denegado.');
}

// ── Validar parámetro ──────────────────────────────────────────────────────
$idEst = (int)($_GET['id'] ?? 0);
if ($idEst <= 0) {
    http_response_code(400);
    exit('ID inválido.');
}

// ── Buscar la foto en la BD ───────────────────────────────────────────────
$db  = getDB();
$q   = $db->prepare("SELECT foto_carnet FROM mat_estudiantes WHERE id_estudiante = :id LIMIT 1");
$q->execute([':id' => $idEst]);
$row = $q->fetch();

if (!$row || empty($row['foto_carnet'])) {
    http_response_code(404);
    exit('Sin foto registrada.');
}

$ruta = $row['foto_carnet'];

// ── Obtener el nombre del archivo ─────────────────────────────────────────
if (OneDriveStorage::esOneDrive($ruta)) {
    $nombre = basename(OneDriveStorage::pathFromRuta($ruta));
} else {
    $nombre = basename($ruta);
}

// ── Servir: detecta automáticamente OneDrive o local ─────────────────────
// servirArchivo() hace stream desde OneDrive si ruta empieza con "onedrive:"
// o readfile() local si es ruta normal (uploads/...)
OneDriveStorage::servirArchivo($ruta, $nombre);