<?php
/**
 * Devuelve una URL de asset con cache busting basado en filemtime.
 * No altera URLs externas (http/https/CDN).
 *
 * Uso recomendado: asset("/frontend/assets/css/styles.css")
 *
 * Soporta despliegues en subcarpetas (cPanel/Apache) detectando el prefijo web
 * correspondiente al root del proyecto relativo a DOCUMENT_ROOT.
 */
function asset_version(string $webPath): string {
    // No versionar recursos externos
    if (preg_match('/^(https?:)?\\/\\//i', $webPath)) {
        return $webPath;
    }

    // Normalizar a ruta web absoluta (desde el root del proyecto)
    $normalizedWebPath = '/' . ltrim($webPath, '/');

    // Resolver ruta de archivo en el sistema
    // Este archivo está en frontend/includes/, root del proyecto es 2 niveles arriba
    $projectRoot = dirname(__DIR__, 2);
    $filePath = $projectRoot . str_replace('/', DIRECTORY_SEPARATOR, $normalizedWebPath);

    // Obtener versión basada en mtime si existe
    if (is_file($filePath)) {
        $ver = @filemtime($filePath);
    } else {
        // Fallback controlado para evitar romper referencias inexistentes
        $ver = time();
    }

    // Detectar si el proyecto está bajo una subcarpeta del DOCUMENT_ROOT (cPanel/Apache)
    $basePrefix = '';
    $docRoot = isset($_SERVER['DOCUMENT_ROOT']) ? rtrim(str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']), '/') : '';
    $projRootFs = rtrim(str_replace('\\', '/', $projectRoot), '/');
    if ($docRoot && strpos($projRootFs, $docRoot) === 0) {
        $baseUri = substr($projRootFs, strlen($docRoot));
        if ($baseUri) {
            $basePrefix = '/' . ltrim($baseUri, '/');
        }
    }

    // Construir URL con basePrefix (si existe) y parámetro de versión
    $webUrl = $basePrefix . $normalizedWebPath;
    if (strpos($webUrl, '?') === false) {
        return $webUrl . '?v=' . $ver;
    }
    return $webUrl . '&v=' . $ver;
}

// Alias más corto
function asset(string $webPath): string {
    return asset_version($webPath);
}
