<?php
/**
 * api/ver_comprobante_pract_fact.php
 * Sirve el comprobante de pago de Prácticas Profesionales a Facturación.
 * Soporta archivos en OneDrive (onedrive:...) y locales (fallback).
 *
 * Uso: GET /api/ver_comprobante_pract_fact.php?id={id_practica}
 * Requiere: ROL_FACTURACION
 */
require_once __DIR__ . '/../config/app.php';
require_once __DIR__ . '/../config/onedrive.php';
require_once __DIR__ . '/../includes/auth.php';
require_once __DIR__ . '/../includes/functions.php';
require_once __DIR__ . '/../includes/OneDriveStorage.php';
requireRol(ROL_FACTURACION);

$idInst     = instId();
$db         = getDB();
$idPractica = (int)($_GET['id'] ?? 0);

if ($idPractica <= 0) {
    http_response_code(400);
    exit('Parámetro inválido.');
}

// ── Verificar que la práctica pertenece al instituto ─────────────
$st = $db->prepare("
    SELECT pr.comprobante_pago, u.nombres, u.apellidos
    FROM   practicas pr
    JOIN   estudiantes e ON e.id_estudiante = pr.id_estudiante
    JOIN   usuarios u    ON u.id_usuario    = e.id_usuario
    WHERE  pr.id_practica  = :id
      AND  pr.id_instituto = :inst
    LIMIT 1
");
$st->execute([':id' => $idPractica, ':inst' => $idInst]);
$row = $st->fetch();

if (!$row || empty($row['comprobante_pago'])) {
    http_response_code(404);
    exit('Comprobante no encontrado.');
}

$ruta         = $row['comprobante_pago'];
$nombreEstudiante = trim($row['apellidos'] . '_' . $row['nombres']);
$ext          = strtolower(pathinfo($ruta, PATHINFO_EXTENSION));
$nombreArchivo = 'comp_pract_' . $idPractica . '_' . $nombreEstudiante . '.' . $ext;

// ── Servir desde OneDrive o local ────────────────────────────────
if (OneDriveStorage::esOneDrive($ruta)) {
    OneDriveStorage::servirArchivo($ruta, $nombreArchivo);
} else {
    // Fallback: archivo local (comprobantes subidos antes de la migración)
    $rutaLocal = __DIR__ . '/../assets/uploads/comprobantes_practicas/' . basename($ruta);
    if (!file_exists($rutaLocal)) {
        http_response_code(404);
        exit('Archivo no encontrado localmente.');
    }
    $mime = mime_content_type($rutaLocal) ?: 'application/octet-stream';
    header('Content-Type: ' . $mime);
    header('Content-Disposition: inline; filename="' . $nombreArchivo . '"');
    header('Content-Length: ' . filesize($rutaLocal));
    header('Cache-Control: private, max-age=3600');
    readfile($rutaLocal);
}
exit;
