<?php
// File: secure_image.php
// يعرض الملف فقط إذا كان الرابط موقّع وصالح زمنياً.
// يعتمد نفس الثوابت/المسارات في upload_serial_document.php

require_once __DIR__ . '/../../connect.php';

const UPLOAD_ROOT = __DIR__ . "/../../private_uploads";
const SIGN_SECRET =  getenv('SECRET_KEY_HMAC'); // نفس المفتاح

// استلام المعطيات من الرابط
$driverId = $_GET['driver_id'] ?? '';
$docType  = $_GET['doc_type']  ?? '';
$extShort = $_GET['ext']       ?? '';
$expires  = $_GET['expires']   ?? '';
$signature= $_GET['signature'] ?? '';

if ($driverId === '' || $docType === '' || $extShort === '' || $expires === '' || $signature === '') {
    http_response_code(400); echo "Missing parameters."; exit;
}

// صلاحية الوقت
if ((int)$expires < time()) {
    http_response_code(403); echo "Link expired."; exit;
}

// تحقق من doc_type
$allowedDocTypes = [
    'driver_license_front',
    'driver_license_back',
    'car_license_front',
    'car_license_back',
];
if (!in_array($docType, $allowedDocTypes, true)) {
    http_response_code(403); echo "Invalid doc_type."; exit;
}

// تحقق من الامتداد
$allowedExts = ['jpg','png','webp'];
if (!in_array($extShort, $allowedExts, true)) {
    http_response_code(403); echo "Invalid ext."; exit;
}

// إعادة توليد التوقيع للمقارنة
$driverIdSafe = preg_replace('/[^A-Za-z0-9_\-]/', '_', $driverId);
$message      = $driverIdSafe . ':' . $docType . ':' . $extShort . ':' . $expires;
$expected     = hash_hmac('sha256', $message, SIGN_SECRET);

if (!hash_equals($expected, $signature)) {
    http_response_code(403); echo "Invalid signature."; exit;
}

// بناء المسار
$h = hash('sha1', $driverIdSafe);
$subdir     = substr($h, 0, 2) . '/' . substr($h, 2, 2);
$serverName = "{$driverIdSafe}__{$docType}.{$extShort}";
$path       = UPLOAD_ROOT . '/' . $subdir . '/' . $serverName;

if (!is_file($path)) {
    http_response_code(404); echo "File not found."; exit;
}

// تحديد النوع
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime  = $finfo->file($path) ?: 'application/octet-stream';

header('Content-Type: ' . $mime);
header('Content-Length: ' . filesize($path));
header('X-Content-Type-Options: nosniff');
// (اختياري) اطلب توكن وصول إضافي عبر Authorization للتحكم الأدق.
// مثال: تحقق من $_SERVER['HTTP_AUTHORIZATION'] هنا إن أردت.
readfile($path);