<?php
// api/ver_comprobante_conv_fact.php
// Sirve el comprobante de pago de convalidación para el rol FACTURACIÓN
// Soporta archivos en OneDrive (onedrive:...) y locales legacy (assets/uploads/comprobantes_conv/)

require_once __DIR__ . '/../config/app.php';
require_once __DIR__ . '/../config/onedrive.php';
require_once __DIR__ . '/../includes/auth.php';
require_once __DIR__ . '/../includes/OneDriveStorage.php';
requireRol(ROL_FACTURACION);

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

if (!$id) {
    http_response_code(400);
    die('Parámetro id requerido.');
}

// Verificar que la solicitud pertenece al mismo instituto
$instCond = $idInst ? 'AND car.id_instituto = :inst' : '';
$st = $db->prepare("
    SELECT con.comprobante_pago
    FROM   convalidaciones con
    JOIN   practicas   c   ON c.id_practica  = con.id_practica
    JOIN   estudiantes e   ON e.id_estudiante = con.id_estudiante
    JOIN   carreras    car ON car.id_carrera  = e.id_carrera
    WHERE  con.id_solicitud = :id
    $instCond
    LIMIT 1
");
$params = [':id' => $id];
if ($idInst) $params[':inst'] = $idInst;
$st->execute($params);
$row = $st->fetch();

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

$rutaBD = $row['comprobante_pago'];

// ── Servir archivo ──────────────────────────────────────────────────────────
if (OneDriveStorage::esOneDrive($rutaBD)) {
    // ── Archivo en OneDrive (nuevos registros) ──────────────────────────────
    $nombreArchivo = basename(OneDriveStorage::pathFromRuta($rutaBD));
    OneDriveStorage::servirArchivo($rutaBD, $nombreArchivo);

} else {
    // ── Archivo local legacy (assets/uploads/comprobantes_conv/) ───────────
    $nombreArchivo = basename($rutaBD);
    $rutaAbsoluta  = dirname(__DIR__) . '/assets/uploads/comprobantes_conv/' . $nombreArchivo;

    if (!file_exists($rutaAbsoluta)) {
        http_response_code(404);
        die('Archivo no encontrado: ' . htmlspecialchars($nombreArchivo));
    }

    $ext  = strtolower(pathinfo($nombreArchivo, PATHINFO_EXTENSION));
    $mime = match($ext) {
        'pdf'        => 'application/pdf',
        'jpg','jpeg' => 'image/jpeg',
        'png'        => 'image/png',
        'gif'        => 'image/gif',
        'webp'       => 'image/webp',
        default      => mime_content_type($rutaAbsoluta) ?: 'application/octet-stream',
    };

    header('Content-Type: ' . $mime);
    header('Content-Disposition: inline; filename="' . $nombreArchivo . '"');
    header('Content-Length: ' . filesize($rutaAbsoluta));
    header('Cache-Control: private, max-age=3600');
    readfile($rutaAbsoluta);
    exit;
}