<?php
/**
 * ICYLAB OS - Auditor de Código Huérfano
 * Escanea el directorio buscando archivos .php que nunca son mencionados en el código.
 */

// Aumentamos el tiempo y memoria por si el proyecto es muy grande
ini_set('memory_limit', '256M');
set_time_limit(300);

$basePath = __DIR__;

// Carpetas que no queremos escanear (librerías externas, imágenes, etc)
$excludeDirs = ['.git', 'vendor', 'node_modules', 'assets', 'uploads'];

// Archivos de entrada comunes que sabemos que no se incluyen en el código, sino que se acceden por URL
$whitelist = ['index.php', 'login.php', 'logout.php', 'auditor.php', 'config.php', 'database.php'];

$allPhpFiles = [];
$referencedFiles = [];

// 1. Recolectar todos los archivos PHP del directorio
$iterator = new RecursiveIteratorIterator(
    new RecursiveCallbackFilterIterator(
        new RecursiveDirectoryIterator($basePath, RecursiveDirectoryIterator::SKIP_DOTS),
        function ($file, $key, $iterator) use ($excludeDirs) {
            return !in_array($iterator->getSubPathName(), $excludeDirs);
        }
    )
);

foreach ($iterator as $file) {
    if ($file->isFile() && strtolower($file->getExtension()) === 'php') {
        // Guardamos la ruta absoluta y el nombre del archivo
        $allPhpFiles[$file->getPathname()] = $file->getFilename();
    }
}

// 2. Escanear el contenido de todos los archivos buscando menciones
foreach ($iterator as $file) {
    if ($file->isFile()) {
        $ext = strtolower($file->getExtension());
        if (in_array($ext, ['php', 'js', 'html'])) {
            $content = file_get_contents($file->getPathname());
            
            foreach ($allPhpFiles as $path => $filename) {
                // Si el nombre del archivo se menciona dentro del contenido de OTRO archivo
                if ($file->getPathname() !== $path && strpos($content, $filename) !== false) {
                    $referencedFiles[] = $path;
                }
            }
        }
    }
}

$referencedFiles = array_unique($referencedFiles);
$orphans = array_diff_key($allPhpFiles, array_flip($referencedFiles));

// Filtrar la lista blanca
foreach ($orphans as $path => $filename) {
    if (in_array($filename, $whitelist)) {
        unset($orphans[$path]);
    }
}

?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Auditor de Código - Resultados</title>
    <style>
        body { font-family: system-ui, sans-serif; background: #0f172a; color: #f8fafc; padding: 40px; margin: 0; }
        .container { max-width: 900px; margin: 0 auto; background: #1e293b; padding: 30px; border-radius: 12px; box-shadow: 0 10px 25px rgba(0,0,0,0.5); }
        h1 { margin-top: 0; color: #38bdf8; }
        .warning { background: #7f1d1d; color: #fca5a5; padding: 15px; border-radius: 8px; font-size: 0.9rem; margin-bottom: 20px; border: 1px solid #b91c1c; }
        .file-list { background: #0f172a; padding: 20px; border-radius: 8px; border: 1px solid #334155; }
        .file-item { padding: 10px 0; border-bottom: 1px solid #1e293b; font-family: monospace; display: flex; justify-content: space-between; }
        .file-item:last-child { border-bottom: none; }
        .badge { background: #475569; padding: 2px 8px; border-radius: 99px; font-size: 0.75rem; }
    </style>
</head>
<body>
    <div class="container">
        <h1>🔍 Reporte de Archivos Huérfanos</h1>
        
        <div class="warning">
            <strong>⚠️ ADVERTENCIA CRÍTICA:</strong> Esta es una herramienta de análisis estático basada en texto. 
            <strong>NUNCA</strong> borres estos archivos sin verificar primero. Podrían ser endpoints de webhooks (APIs), 
            archivos de configuración o páginas a las que los usuarios entran escribiendo la URL directa.
        </div>

        <p>Se escanearon <strong><?php echo count($allPhpFiles); ?></strong> archivos PHP en el directorio actual.</p>
        <p>Se encontraron <strong><?php echo count($orphans); ?></strong> posibles archivos que no son referenciados en el código:</p>

        <div class="file-list">
            <?php if (empty($orphans)): ?>
                <div style="color: #4ade80;">¡Felicidades! No se encontró código muerto evidente.</div>
            <?php else: ?>
                <?php foreach ($orphans as $path => $filename): ?>
                    <div class="file-item">
                        <span><?php echo str_replace($basePath, '', $path); ?></span>
                        <span class="badge"><?php echo htmlspecialchars($filename); ?></span>
                    </div>
                <?php endforeach; ?>
            <?php endif; ?>
        </div>
    </div>
</body>
</html>