<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('log_errors', '1');
ini_set('error_log', __DIR__ . '/limpiar_web_vacias_error.log');

/**
 * LIMPIADOR DE CARPETAS WEB VACIAS - SUBDOMINIOS SIE
 * ===================================================
 * Detecta subdominios que tienen carpeta web/ pero sin contenido real
 * (solo .well-known, cgi-bin, .htaccess, etc.) y la elimina.
 *
 * Estos sistemas NO tienen pagina web propia, pero la carpeta web/
 * ocupa espacio y puede causar confusion con el index.html redirect.
 *
 * CRITERIO DE "CARPETA WEB VACIA":
 *   La carpeta web/ existe pero SOLO contiene archivos/carpetas "residuales":
 *   .well-known, cgi-bin, .htaccess, .htaccess.no_htaccess.phpupgrader,
 *   .trash, error_log, .ftpquota
 *   NO contiene: index.php, index.html, ni ningun otro archivo de contenido real.
 *
 * MODOS:
 *   ?modo=escanear   (default) - Solo muestra cuales carpetas web/ estan vacias
 *   ?modo=limpiar               - Elimina las carpetas web/ vacias con backup
 *   ?sub=nombre                 - Solo un subdominio
 *
 * SEGURIDAD:
 *   - Crea backup comprimido (tar.gz) de la carpeta web/ antes de eliminar
 *   - Solo borra cuando TODOS los archivos son residuales
 *   - Corrige automaticamente index.html para redirigir a doku.php
 */

// =====================================================================
//  CONFIGURACION
// =====================================================================

$basePath = '/home/systeng3/public_html';

$excluir = ['.', '..', 'cgi-bin', '.well-known', '.trash', '.htaccess',
            'respaldo', 'diagnosticos', 'tmp', 'error_log'];

// Archivos/carpetas que se consideran "residuales" (NO son contenido web real)
$residuales = [
    '.',
    '..',
    '.well-known',
    'cgi-bin',
    '.htaccess',
    '.htaccess.no_htaccess.phpupgrader',
    '.trash',
    'error_log',
    '.ftpquota',
];

// =====================================================================
//  PARAMETROS
// =====================================================================

$esCLI = (php_sapi_name() === 'cli');
if (!$esCLI) header('Content-Type: text/html; charset=UTF-8');

@set_time_limit(300);
@ini_set('max_execution_time', 300);
@ini_set('memory_limit', '256M');

$modo      = $esCLI ? ($argv[1] ?? 'escanear') : ($_GET['modo'] ?? 'escanear');
$targetSub = $esCLI ? ($argv[2] ?? '')          : ($_GET['sub'] ?? '');

if (!empty($targetSub)) {
    if (preg_match('#^https?://#i', $targetSub)) {
        $parsed = parse_url($targetSub);
        if (isset($parsed['host'])) {
            $parts = explode('.', $parsed['host']);
            $targetSub = $parts[0];
        }
    }
    $targetSub = basename(preg_replace('/[^a-zA-Z0-9._-]/', '', $targetSub));
}

// =====================================================================
//  FUNCIONES
// =====================================================================

/**
 * Verifica si la carpeta web/ de un subdominio esta "vacia" (solo residuales)
 * Retorna array con detalles
 */
function analizarCarpetaWeb($subPath, $carpeta, $residuales)
{
    $webPath = $subPath . '/web';
    $r = [
        'carpeta'       => $carpeta,
        'tiene_web'     => false,
        'web_vacia'     => false,
        'tiene_doku'    => file_exists($subPath . '/doku.php'),
        'archivos_web'  => [],
        'archivos_real' => [],
        'peso_bytes'    => 0,
        'detalle'       => '',
    ];

    if (!is_dir($webPath)) {
        $r['detalle'] = 'Sin carpeta web/';
        return $r;
    }

    $r['tiene_web'] = true;

    // Calcular peso total de web/
    $r['peso_bytes'] = calcularPesoDir($webPath);

    // Listar contenido de web/
    $contenido = @scandir($webPath);
    if ($contenido === false) {
        $r['detalle'] = 'No se puede leer web/';
        return $r;
    }

    $archivosReales = [];
    $archivosResiduales = [];

    foreach ($contenido as $item) {
        if ($item === '.' || $item === '..') continue;
        if (in_array($item, $residuales)) {
            $archivosResiduales[] = $item;
        } else {
            $archivosReales[] = $item;
        }
    }

    $r['archivos_web'] = array_merge($archivosResiduales, $archivosReales);
    $r['archivos_real'] = $archivosReales;

    if (empty($archivosReales)) {
        $r['web_vacia'] = true;
        $r['detalle'] = 'Solo residuales: ' . implode(', ', $archivosResiduales);
    } else {
        $r['detalle'] = count($archivosReales) . ' archivo(s) real(es): ' . implode(', ', array_slice($archivosReales, 0, 5));
        if (count($archivosReales) > 5) {
            $r['detalle'] .= '... (+' . (count($archivosReales) - 5) . ' mas)';
        }
    }

    return $r;
}

/**
 * Calcula el peso total de un directorio recursivamente
 */
function calcularPesoDir($dir)
{
    $total = 0;
    $items = @scandir($dir);
    if ($items === false) return 0;
    foreach ($items as $item) {
        if ($item === '.' || $item === '..') continue;
        $path = $dir . '/' . $item;
        if (is_file($path)) {
            $total += filesize($path);
        } elseif (is_dir($path)) {
            $total += calcularPesoDir($path);
        }
    }
    return $total;
}

/**
 * Formatea bytes a unidad legible
 */
function formatBytes($bytes)
{
    if ($bytes === 0) return '0 B';
    $units = ['B', 'KB', 'MB', 'GB'];
    $i = floor(log($bytes, 1024));
    $i = min($i, count($units) - 1);
    return round($bytes / pow(1024, $i), 1) . ' ' . $units[$i];
}

/**
 * Elimina un directorio recursivamente
 */
function eliminarDirRecursivo($dir)
{
    if (!is_dir($dir)) return true;
    $items = @scandir($dir);
    if ($items === false) return false;
    foreach ($items as $item) {
        if ($item === '.' || $item === '..') continue;
        $path = $dir . '/' . $item;
        if (is_dir($path)) {
            if (!eliminarDirRecursivo($path)) return false;
        } else {
            if (!@unlink($path)) return false;
        }
    }
    return @rmdir($dir);
}

/**
 * Genera el index.html correcto para sistemas SIN web/ (dokuwiki)
 */
function getIndexHtmlDoku()
{
    return '<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="0; url=doku.php">
<script>window.location.href = "doku.php";</script>
</head>
<body></body>
</html>';
}

/**
 * Copia recursivamente un directorio a otro (backup PHP puro)
 */
function copiarDirRecursivo($src, $dst)
{
    if (!is_dir($src)) return false;
    if (!@mkdir($dst, 0755, true) && !is_dir($dst)) return false;
    $items = @scandir($src);
    if ($items === false) return false;
    foreach ($items as $item) {
        if ($item === '.' || $item === '..') continue;
        $srcPath = $src . '/' . $item;
        $dstPath = $dst . '/' . $item;
        if (is_dir($srcPath)) {
            if (!copiarDirRecursivo($srcPath, $dstPath)) return false;
        } else {
            if (!@copy($srcPath, $dstPath)) return false;
        }
    }
    return true;
}

/**
 * Verifica si exec() esta disponible
 */
function execDisponible()
{
    if (!function_exists('exec')) return false;
    $disabled = array_map('trim', explode(',', ini_get('disable_functions')));
    return !in_array('exec', $disabled);
}

/**
 * Elimina la carpeta web/ vacia de un subdominio
 * 1. Crea backup (tar.gz, ZipArchive, o copia PHP puro)
 * 2. Borra la carpeta
 * 3. Corrige index.html para redirigir a doku.php
 */
function limpiarWebVacia($subPath, $carpeta)
{
    $webPath = $subPath . '/web';
    $timestamp = date('Ymd_His');
    $backupName = '';
    $backupOk = false;
    $metodo = '';

    // ── INTENTO 1: tar.gz con exec() ──
    if (execDisponible()) {
        $backupName = 'web_backup_' . $timestamp . '.tar.gz';
        $backupPath = $subPath . '/' . $backupName;

        $cmd = 'cd ' . escapeshellarg($subPath) . ' && tar -czf ' . escapeshellarg($backupName) . ' web/ 2>&1';
        $output = [];
        $exitCode = 0;
        exec($cmd, $output, $exitCode);

        if ($exitCode === 0 && file_exists($backupPath) && filesize($backupPath) > 0) {
            $backupOk = true;
            $metodo = 'tar.gz';
        } else {
            @unlink($backupPath);
            // tar sin compresion
            $backupName = 'web_backup_' . $timestamp . '.tar';
            $backupPath = $subPath . '/' . $backupName;
            $cmd = 'cd ' . escapeshellarg($subPath) . ' && tar -cf ' . escapeshellarg($backupName) . ' web/ 2>&1';
            exec($cmd, $output, $exitCode);
            if ($exitCode === 0 && file_exists($backupPath) && filesize($backupPath) > 0) {
                $backupOk = true;
                $metodo = 'tar';
            } else {
                @unlink($backupPath);
            }
        }
    }

    // ── INTENTO 2: ZipArchive PHP ──
    if (!$backupOk && class_exists('ZipArchive')) {
        $backupName = 'web_backup_' . $timestamp . '.zip';
        $backupPath = $subPath . '/' . $backupName;
        $zip = new \ZipArchive();
        if ($zip->open($backupPath, \ZipArchive::CREATE | \ZipArchive::OVERWRITE) === true) {
            $zip->addEmptyDir('web');
            $iterator = new \RecursiveIteratorIterator(
                new \RecursiveDirectoryIterator($webPath, \RecursiveDirectoryIterator::SKIP_DOTS),
                \RecursiveIteratorIterator::SELF_FIRST
            );
            foreach ($iterator as $file) {
                $realPath = str_replace('\\', '/', $file->getPathname());
                $webBase = str_replace('\\', '/', $webPath);
                $relPath = 'web/' . ltrim(substr($realPath, strlen($webBase)), '/');
                if ($file->isDir()) {
                    $zip->addEmptyDir($relPath);
                } else {
                    $zip->addFile($file->getPathname(), $relPath);
                }
            }
            $zip->close();
            if (file_exists($backupPath) && filesize($backupPath) > 0) {
                $backupOk = true;
                $metodo = 'zip';
            }
        }
    }

    // ── INTENTO 3: Copia plana PHP puro (ultimo recurso) ──
    if (!$backupOk) {
        $backupName = 'web_backup_' . $timestamp;
        $backupPath = $subPath . '/' . $backupName;
        if (copiarDirRecursivo($webPath, $backupPath)) {
            $backupOk = true;
            $metodo = 'copia-dir';
        } else {
            return ['ok' => false, 'msg' => 'No se pudo crear backup de web/ (exec, ZipArchive y copia PHP fallaron)', 'backup' => ''];
        }
    }

    // 2. Eliminar carpeta web/
    if (!eliminarDirRecursivo($webPath)) {
        return ['ok' => false, 'msg' => 'No se pudo eliminar web/ (backup creado en ' . $backupName . ')', 'backup' => $backupName];
    }

    // 3. Corregir index.html para redirigir a doku.php en vez de web/index.php
    $indexPath = $subPath . '/index.html';
    if (file_exists($indexPath)) {
        $contenido = @file_get_contents($indexPath);
        // Solo corregir si apunta a web/
        if ($contenido !== false && stripos($contenido, 'web/') !== false) {
            // Backup del index.html original
            @copy($indexPath, $indexPath . '.bak_webclean_' . $timestamp);
            @file_put_contents($indexPath, getIndexHtmlDoku());
        }
    } else {
        // Crear index.html nuevo apuntando a doku.php
        @file_put_contents($indexPath, getIndexHtmlDoku());
    }

    return [
        'ok' => true,
        'msg' => 'web/ eliminada + index.html corregido (' . $metodo . ')',
        'backup' => $backupName,
    ];
}

// =====================================================================
//  EJECUCION
// =====================================================================

$tiempoInicio = microtime(true);

// Obtener carpetas
if (!empty($targetSub)) {
    $carpetas = [$targetSub];
} else {
    $carpetas = [];
    $scan = @scandir($basePath);
    if (!$scan) {
        echo $esCLI ? "ERROR: No se puede leer {$basePath}\n" : "<p style='color:red'>ERROR: No se puede leer {$basePath}</p>";
        exit(1);
    }
    foreach ($scan as $c) {
        if (in_array($c, $excluir)) continue;
        if (!is_dir($basePath . '/' . $c)) continue;
        $carpetas[] = $c;
    }
    sort($carpetas);
}

// Analizar todos
$resultados = [];
foreach ($carpetas as $carpeta) {
    $subPath = $basePath . '/' . $carpeta;
    if (!is_dir($subPath)) continue;
    $r = analizarCarpetaWeb($subPath, $carpeta, $residuales);
    // Solo incluir subdominios que son sistemas SIE (tienen doku.php)
    if (!$r['tiene_doku']) continue;
    $resultados[] = $r;
}

// Estadisticas
$totalSistemas  = count($resultados);
$conWeb         = count(array_filter($resultados, fn($r) => $r['tiene_web']));
$sinWeb         = count(array_filter($resultados, fn($r) => !$r['tiene_web']));
$webVacias      = array_filter($resultados, fn($r) => $r['web_vacia']);
$totalVacias    = count($webVacias);
$webConContenido = count(array_filter($resultados, fn($r) => $r['tiene_web'] && !$r['web_vacia']));
$pesoTotalVacias = array_sum(array_map(fn($r) => $r['peso_bytes'], $webVacias));

// =====================================================================
//  MODO LIMPIAR
// =====================================================================

if ($modo === 'limpiar') {
    @set_time_limit(600);
    @ini_set('max_execution_time', 600);

    if (!$esCLI) {
        header('Content-Type: text/html; charset=UTF-8');
        while (ob_get_level()) ob_end_flush();
        @ini_set('output_buffering', 'off');
        @ini_set('zlib.output_compression', false);
        if (function_exists('apache_setenv')) {
            @apache_setenv('no-gzip', '1');
        }
        echo "<!DOCTYPE html><html><head><title>Limpiando carpetas web vacias...</title></head><body><pre>\n";
    }

    echo "=== LIMPIADOR DE CARPETAS WEB VACIAS - SIE ===\n";
    echo "Fecha: " . date('Y-m-d H:i:s') . "\n";
    echo "PHP: " . phpversion() . "\n";
    echo "Total SIE: {$totalSistemas} | Con web/: {$conWeb} | Web vacias: {$totalVacias}\n";
    echo "Espacio a liberar: " . formatBytes($pesoTotalVacias) . "\n";
    echo "================================================\n\n";
    if (!$esCLI) { flush(); }

    $limpiados = 0;
    $errores = 0;
    $i = 0;

    foreach ($webVacias as $r) {
        $i++;
        $subPath = $basePath . '/' . $r['carpeta'];
        echo "[{$i}/{$totalVacias}] {$r['carpeta']} (" . formatBytes($r['peso_bytes']) . ") ... ";
        if (!$esCLI) { flush(); }

        try {
            $fix = limpiarWebVacia($subPath, $r['carpeta']);
            if ($fix['ok']) {
                $limpiados++;
                echo "OK - {$fix['msg']} (backup: {$fix['backup']})\n";
            } else {
                $errores++;
                echo "ERROR - {$fix['msg']}\n";
            }
        } catch (\Throwable $e) {
            $errores++;
            echo "EXCEPTION: " . $e->getMessage() . "\n";
        }
        if (!$esCLI) { flush(); }
    }

    echo "\n================================================\n";
    echo "Limpiados: {$limpiados} de {$totalVacias} | Errores: {$errores}\n";
    echo "Espacio liberado: ~" . formatBytes($pesoTotalVacias) . "\n";
    echo "Tiempo: " . round(microtime(true) - $tiempoInicio, 2) . "s\n";
    echo "============ TODOS COMPLETADOS =============\n";

    if (!$esCLI) {
        echo "</pre>";
        echo "<div style='font-family:monospace;padding:20px;background:#f0fdf4;border:2px solid #16a34a;border-radius:10px;margin:20px;text-align:center;'>";
        echo "<p style='font-size:1.3em;font-weight:bold;color:#16a34a;'>LIMPIEZA COMPLETADA</p>";
        echo "<p>{$limpiados} carpetas web/ vacias eliminadas</p>";
        if ($errores > 0) echo "<p style='color:#dc2626;'>{$errores} errores</p>";
        echo "<p><a href='?' style='color:#2563eb;font-size:1.1em;'>Volver al panel de escaneo</a></p>";
        echo "</div>";
    }
    exit(0);
}

$tiempoFin = round(microtime(true) - $tiempoInicio, 2);

// =====================================================================
//  SALIDA CLI
// =====================================================================

if ($esCLI) {
    echo "================================================================\n";
    echo " LIMPIADOR DE CARPETAS WEB VACIAS - SUBDOMINIOS SIE\n";
    echo " " . date('Y-m-d H:i:s') . " | Modo: {$modo} | Tiempo: {$tiempoFin}s\n";
    echo "================================================================\n\n";

    echo "Total SIE: {$totalSistemas} | Con web/: {$conWeb} | Web vacias: {$totalVacias} | Con contenido: {$webConContenido}\n";
    echo "Espacio en web vacias: " . formatBytes($pesoTotalVacias) . "\n\n";

    if (!empty($webVacias)) {
        echo "=== CARPETAS WEB VACIAS (se pueden eliminar) ===\n";
        foreach ($webVacias as $r) {
            echo sprintf("  %-30s %8s  [%s]\n", $r['carpeta'], formatBytes($r['peso_bytes']), $r['detalle']);
        }
    }
    exit(0);
}

// =====================================================================
//  SALIDA HTML
// =====================================================================
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Limpiador de Carpetas Web Vacias - SIE</title>
<style>
    * { box-sizing: border-box; margin: 0; padding: 0; }
    body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #f1f5f9; color: #1e293b; padding: 20px; }
    .container { max-width: 1400px; margin: 0 auto; }
    h1 { font-size: 1.5em; color: #0f172a; margin-bottom: 4px; }
    .subtitle { color: #64748b; font-size: 0.88em; margin-bottom: 20px; }

    .summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 12px; margin-bottom: 20px; }
    .card { background: #fff; border-radius: 10px; padding: 14px; text-align: center; box-shadow: 0 1px 3px rgba(0,0,0,0.08); }
    .card .num { font-size: 1.8em; font-weight: 700; }
    .card .label { font-size: 0.8em; color: #64748b; }
    .green { color: #16a34a; } .red { color: #dc2626; } .yellow { color: #d97706; } .blue { color: #2563eb; } .purple { color: #8b5cf6; }

    .section { background: #fff; border-radius: 10px; padding: 20px; margin-bottom: 16px; box-shadow: 0 1px 3px rgba(0,0,0,0.08); }
    .section h2 { font-size: 1.1em; margin-bottom: 12px; }

    .explain { background: #eff6ff; border: 1px solid #93c5fd; border-radius: 10px; padding: 16px; margin-bottom: 20px; }
    .explain h2 { color: #1e40af; margin-bottom: 8px; font-size: 1em; }
    .explain p { font-size: 0.86em; color: #334155; margin-bottom: 4px; }
    code { background: #f1f5f9; padding: 1px 4px; border-radius: 3px; font-size: 0.86em; }

    .actions { display: flex; gap: 12px; margin-bottom: 20px; flex-wrap: wrap; align-items: center; }
    .btn { padding: 10px 20px; border: none; border-radius: 8px; font-size: 0.9em; cursor: pointer; text-decoration: none; display: inline-block; font-weight: 600; }
    .btn-blue { background: #2563eb; color: #fff; } .btn-blue:hover { background: #1d4ed8; }
    .btn-red { background: #dc2626; color: #fff; } .btn-red:hover { background: #b91c1c; }
    .btn-green { background: #16a34a; color: #fff; } .btn-gray { background: #64748b; color: #fff; }

    table { width: 100%; border-collapse: collapse; font-size: 0.83em; }
    th { text-align: left; padding: 8px 6px; border-bottom: 2px solid #e2e8f0; color: #475569; font-size: 0.85em; }
    td { padding: 7px 6px; border-bottom: 1px solid #f1f5f9; }
    tr:hover { background: #f8fafc; }
    tr.row-vacia { background: #fef2f2; }
    tr.row-vacia:hover { background: #fee2e2; }

    .badge { display: inline-block; padding: 2px 7px; border-radius: 4px; font-size: 0.76em; font-weight: 600; margin-bottom: 2px; }
    .badge-ok { background: #dcfce7; color: #166534; }
    .badge-err { background: #fee2e2; color: #991b1b; }
    .badge-warn { background: #fef3c7; color: #92400e; }
    .badge-info { background: #dbeafe; color: #1e40af; }
    .badge-gray { background: #f1f5f9; color: #475569; }

    .filter-bar { margin-bottom: 12px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
    .filter-bar input, .filter-bar select { padding: 6px 10px; border: 1px solid #cbd5e1; border-radius: 6px; font-size: 0.86em; }
    .filter-bar input { width: 200px; }

    .archivo-list { font-size: 0.78em; color: #64748b; max-width: 300px; word-break: break-all; }
</style>
</head>
<body>
<div class="container">

<h1>&#128465; Limpiador de Carpetas Web Vacias - SIE</h1>
<p class="subtitle">
    <?= date('Y-m-d H:i:s') ?> |
    Modo: <strong><?= $modo === 'limpiar' ? '&#9888;&#65039; LIMPIAR' : '&#128269; ESCANEAR' ?></strong> |
    Tiempo: <?= $tiempoFin ?>s |
    Sistemas SIE: <?= $totalSistemas ?>
</p>

<div class="explain">
    <h2>&#128161; Que hace este script</h2>
    <p><strong>Problema:</strong> Algunos subdominios SIE tienen una carpeta <code>web/</code> que solo contiene archivos residuales
    (<code>.well-known</code>, <code>cgi-bin</code>, <code>.htaccess</code>) pero NO tienen pagina web real.
    Esto ocupa espacio y puede causar problemas con la redireccion del <code>index.html</code>.</p>
    <p><strong>Solucion:</strong> Detecta estas carpetas vacias, las respalda como <code>.tar.gz</code>, las elimina y corrige el <code>index.html</code> para redirigir a <code>doku.php</code>.</p>
    <p style="margin-top:6px;"><strong>&#128274; Seguridad:</strong> Crea backup <code>web_backup_YYYYMMDD_HHMMSS.tar.gz</code> antes de eliminar. Solo actua cuando la carpeta web/ NO tiene contenido real.</p>
</div>

<!-- Resumen -->
<div class="summary">
    <div class="card"><div class="num blue"><?= $totalSistemas ?></div><div class="label">Sistemas SIE</div></div>
    <div class="card"><div class="num green"><?= $sinWeb ?></div><div class="label">Sin web/ (OK)</div></div>
    <div class="card"><div class="num blue"><?= $webConContenido ?></div><div class="label">Web con contenido</div></div>
    <div class="card"><div class="num <?= $totalVacias > 0 ? 'red' : 'green' ?>"><?= $totalVacias ?></div><div class="label">&#128465; Web vacias</div></div>
    <div class="card"><div class="num <?= $totalVacias > 0 ? 'yellow' : 'green' ?>"><?= formatBytes($pesoTotalVacias) ?></div><div class="label">Espacio a liberar</div></div>
</div>

<!-- Probar con UN solo sistema -->
<?php if (empty($targetSub) && $modo !== 'limpiar'): ?>
<div class="section" style="border-left:4px solid #2563eb;">
    <h2 style="margin-bottom:10px;">&#127919; Probar con UN solo sistema</h2>
    <p style="font-size:0.85em;color:#64748b;margin-bottom:12px;">Selecciona un subdominio para escanear o limpiar individualmente antes de aplicar masivamente.</p>
    <div style="display:flex;gap:10px;align-items:center;flex-wrap:wrap;">
        <select id="selectSub" style="padding:8px 12px;border:1px solid #cbd5e1;border-radius:8px;font-size:0.9em;min-width:250px;">
            <option value="">-- Seleccionar subdominio --</option>
            <?php foreach ($resultados as $r):
                if (!$r['tiene_web']) continue;
                $iconEstado = $r['web_vacia'] ? ' [VACIA]' : ' [con contenido]';
            ?>
            <option value="<?= htmlspecialchars($r['carpeta']) ?>"><?= htmlspecialchars($r['carpeta']) ?><?= $iconEstado ?></option>
            <?php endforeach; ?>
        </select>
        <button onclick="accionIndividual('escanear')" class="btn btn-blue">&#128269; Escanear</button>
        <button onclick="accionIndividual('limpiar')" class="btn btn-red">&#128465; Limpiar</button>
    </div>
</div>
<?php endif; ?>

<!-- Botones de accion -->
<div class="actions">
    <?php if (!empty($targetSub)): ?>
        <a href="?" class="btn btn-gray">&#8592; Volver a todos</a>
        <?php if ($totalVacias > 0 && $modo !== 'limpiar'): ?>
            <a href="?modo=limpiar&sub=<?= urlencode($targetSub) ?>" class="btn btn-red"
               onclick="return confirm('Limpiar carpeta web/ de <?= htmlspecialchars($targetSub) ?>?\n\nSe creara backup .tar.gz antes de eliminar.\nEl index.html se corregira para redirigir a doku.php.')">
                &#128465; Limpiar web/ de <?= htmlspecialchars($targetSub) ?>
            </a>
        <?php endif; ?>
    <?php else: ?>
        <a href="?modo=escanear" class="btn btn-blue">&#128269; Escanear todos</a>
        <?php if ($totalVacias > 0 && $modo !== 'limpiar'): ?>
            <a href="?modo=limpiar" class="btn btn-red"
               onclick="return confirm('ATENCION: Se van a eliminar <?= $totalVacias ?> carpetas web/ vacias.\n\nEspacio a liberar: <?= formatBytes($pesoTotalVacias) ?>\n\nAcciones por cada subdominio:\n1. Backup web/ como .tar.gz\n2. Eliminar carpeta web/\n3. Corregir index.html a doku.php\n\nContinuar?')">
                &#128465; Limpiar TODAS (<?= $totalVacias ?> carpetas vacias)
            </a>
        <?php endif; ?>
    <?php endif; ?>
</div>

<?php if ($totalVacias > 0 && $modo !== 'limpiar'): ?>
<!-- Lista de carpetas vacias -->
<div class="section" style="border-left:4px solid #dc2626;">
    <h2>&#128465; Carpetas web/ vacias - para eliminar (<?= $totalVacias ?>)</h2>
    <p style="font-size:0.85em;color:#64748b;margin-bottom:12px;">
        Estos subdominios tienen carpeta <code>web/</code> pero sin ningun contenido real.
        Espacio total: <strong><?= formatBytes($pesoTotalVacias) ?></strong>
    </p>
    <table>
        <thead>
            <tr>
                <th>#</th>
                <th>Subdominio</th>
                <th>Contenido residual</th>
                <th>Peso</th>
                <th>Accion</th>
            </tr>
        </thead>
        <tbody>
        <?php $i = 0; foreach ($webVacias as $r): $i++; ?>
            <tr class="row-vacia">
                <td><?= $i ?></td>
                <td><strong><?= htmlspecialchars($r['carpeta']) ?></strong></td>
                <td class="archivo-list"><?= htmlspecialchars(implode(', ', $r['archivos_web'])) ?></td>
                <td><?= formatBytes($r['peso_bytes']) ?></td>
                <td>
                    <a href="?modo=limpiar&sub=<?= urlencode($r['carpeta']) ?>"
                       onclick="return confirm('Limpiar web/ de <?= htmlspecialchars($r['carpeta']) ?>?')"
                       style="color:#dc2626;font-weight:600;font-size:0.85em;text-decoration:none;">
                        &#128465; Limpiar
                    </a>
                </td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
</div>
<?php endif; ?>

<!-- Tabla completa -->
<div class="section">
    <h2>&#128203; Todos los subdominios SIE (<?= $totalSistemas ?>)</h2>
    <div class="filter-bar">
        <input type="text" id="filtro" placeholder="Buscar..." oninput="filtrar()">
        <select id="filtroEstado" onchange="filtrar()">
            <option value="">Todos</option>
            <option value="vacia">Web vacias</option>
            <option value="conweb">Web con contenido</option>
            <option value="sinweb">Sin carpeta web/</option>
        </select>
    </div>
    <table id="tabla">
        <thead>
            <tr>
                <th>#</th>
                <th>Subdominio</th>
                <th>Carpeta web/</th>
                <th>Estado</th>
                <th>Contenido</th>
                <th>Peso web/</th>
            </tr>
        </thead>
        <tbody>
        <?php $i = 0; foreach ($resultados as $r): $i++; ?>
            <?php
                if ($r['web_vacia']) $estado = 'vacia';
                elseif ($r['tiene_web']) $estado = 'conweb';
                else $estado = 'sinweb';
            ?>
            <tr class="<?= $r['web_vacia'] ? 'row-vacia' : '' ?>"
                data-nombre="<?= strtolower($r['carpeta']) ?>"
                data-estado="<?= $estado ?>">
                <td><?= $i ?></td>
                <td><strong><?= htmlspecialchars($r['carpeta']) ?></strong></td>
                <td>
                    <?php if (!$r['tiene_web']): ?>
                        <span class="badge badge-gray">No tiene</span>
                    <?php elseif ($r['web_vacia']): ?>
                        <span class="badge badge-err">VACIA</span>
                    <?php else: ?>
                        <span class="badge badge-ok">Con contenido</span>
                    <?php endif; ?>
                </td>
                <td>
                    <?php if (!$r['tiene_web']): ?>
                        <span class="badge badge-ok">OK - Solo DokuWiki</span>
                    <?php elseif ($r['web_vacia']): ?>
                        <span class="badge badge-warn">Eliminar web/</span>
                    <?php else: ?>
                        <span class="badge badge-info">Pagina web activa</span>
                    <?php endif; ?>
                </td>
                <td class="archivo-list">
                    <?php if ($r['tiene_web']): ?>
                        <?= htmlspecialchars($r['detalle']) ?>
                    <?php else: ?>
                        <span style="color:#94a3b8;">N/A</span>
                    <?php endif; ?>
                </td>
                <td>
                    <?php if ($r['tiene_web']): ?>
                        <?= formatBytes($r['peso_bytes']) ?>
                    <?php else: ?>
                        <span style="color:#94a3b8;">-</span>
                    <?php endif; ?>
                </td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
</div>

</div>

<script>
function accionIndividual(modo) {
    var sub = document.getElementById('selectSub');
    if (!sub || !sub.value) {
        alert('Selecciona un subdominio primero');
        return;
    }
    if (modo === 'limpiar') {
        if (!confirm('Limpiar carpeta web/ de ' + sub.value + '?\n\nSe creara backup .tar.gz antes de eliminar.')) return;
    }
    window.location.href = '?modo=' + modo + '&sub=' + encodeURIComponent(sub.value);
}

function filtrar() {
    var texto = document.getElementById('filtro').value.toLowerCase();
    var estado = document.getElementById('filtroEstado').value;
    document.querySelectorAll('#tabla tbody tr').forEach(function(f) {
        var mostrar = true;
        if (texto && f.getAttribute('data-nombre').indexOf(texto) === -1) mostrar = false;
        if (estado && f.getAttribute('data-estado') !== estado) mostrar = false;
        f.style.display = mostrar ? '' : 'none';
    });
}
</script>
</body>
</html>
<?php
