<?php
/**
 * kyc-file.php  — Proxy para servir archivos KYC
 * GET /kyc/file?id=123&f=kyc_123_sub1_1234567890.jpg
 *
 * Valida el token admin antes de servir el archivo.
 */

require_once __DIR__ . '/../config.php';

// ── Validar token admin ───────────────────────────────────────────────────────
$headers    = getallheaders();
$authHeader = $headers['Authorization'] ?? $headers['authorization'] ?? '';

// También aceptar token por query param (para <img src="..."> y window.open)
$tokenParam = $_GET['token'] ?? '';

$token = '';
if (preg_match('/Bearer\s+(.+)/i', $authHeader, $m)) {
    $token = trim($m[1]);
} elseif ($tokenParam) {
    $token = trim($tokenParam);
}

if (!$token) {
    http_response_code(401);
    echo 'Token requerido'; exit;
}

$db      = getDB();
$stmtTok = $db->prepare("SELECT idusuarios_sist FROM admin_sessions WHERE token = ? AND expira > NOW()");
$stmtTok->execute([$token]);
if (!$stmtTok->fetch()) {
    http_response_code(401);
    echo 'Sesión inválida o expirada'; exit;
}

// ── Validar parámetros ────────────────────────────────────────────────────────
$id       = isset($_GET['id']) ? (int)$_GET['id'] : 0;
$filename = $_GET['f'] ?? '';

if ($id <= 0 || !$filename) {
    http_response_code(400);
    echo 'Parámetros inválidos'; exit;
}

// Validar que el nombre de archivo sea el formato esperado (seguridad)
if (!preg_match('/^kyc_\d+_sub[1-4]_\d+\.(jpg|jpeg|png|gif|webp|heic|pdf)$/i', $filename)) {
    http_response_code(400);
    echo 'Nombre de archivo no válido'; exit;
}

// ── Leer archivo ──────────────────────────────────────────────────────────────
// Este archivo está en: public_html/app-api/kyc/kyc-file.php
// dirname(__DIR__) = public_html/app-api
$filePath = dirname(__DIR__) . '/uploads/kyc/' . $id . '/' . $filename;

if (!file_exists($filePath) || !is_file($filePath)) {
    http_response_code(404);
    echo 'Archivo no encontrado'; exit;
}

// ── Content-Type ──────────────────────────────────────────────────────────────
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
$mime = match($ext) {
    'pdf'          => 'application/pdf',
    'png'          => 'image/png',
    'gif'          => 'image/gif',
    'webp'         => 'image/webp',
    'heic'         => 'image/heic',
    default        => 'image/jpeg',   // jpg, jpeg
};

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