<?php
/**
 * Script de limpieza para produccion.
 * Coloca este archivo en: public/limpieza.php
 * Accede a: https://tudominio.com/limpieza.php
 * ELIMINA este archivo despues de usarlo.
 */

declare(strict_types=1);

error_reporting(E_ALL);
ini_set('display_errors', '1');

header('Content-Type: text/html; charset=UTF-8');

function section(string $class, string $title, string $body): void
{
    echo '<div class="' . $class . '"><strong>' . $title . '</strong><br>' . $body . '</div>';
}

function deleteFiles(string $pattern): int
{
    $count = 0;
    foreach (glob($pattern) as $file) {
        if (is_file($file) && @unlink($file)) {
            $count++;
        }
    }
    return $count;
}

function deleteDirsFiles(string $dir): int
{
    $count = 0;
    if (!is_dir($dir)) {
        return $count;
    }
    $items = scandir($dir);
    if ($items === false) {
        return $count;
    }
    foreach ($items as $item) {
        if ($item === '.' || $item === '..') {
            continue;
        }
        $path = $dir . DIRECTORY_SEPARATOR . $item;
        if (is_file($path) && @unlink($path)) {
            $count++;
        }
    }
    return $count;
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Limpieza de cache</title>
    <style>
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            max-width: 900px;
            margin: 40px auto;
            padding: 20px;
            background: #f5f5f5;
        }
        .container {
            background: white;
            padding: 28px;
            border-radius: 10px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
        }
        h1 {
            color: #333;
            border-bottom: 3px solid #0ea5e9;
            padding-bottom: 10px;
        }
        .success {
            background: #d4edda;
            color: #155724;
            padding: 12px;
            border-radius: 5px;
            border-left: 4px solid #28a745;
            margin: 16px 0;
        }
        .error {
            background: #f8d7da;
            color: #721c24;
            padding: 12px;
            border-radius: 5px;
            border-left: 4px solid #dc3545;
            margin: 16px 0;
        }
        .info {
            background: #d1ecf1;
            color: #0c5460;
            padding: 12px;
            border-radius: 5px;
            border-left: 4px solid #17a2b8;
            margin: 16px 0;
        }
        code {
            background: #f4f4f4;
            padding: 2px 6px;
            border-radius: 3px;
            font-family: 'Courier New', monospace;
        }
        .btn {
            display: inline-block;
            padding: 10px 18px;
            background: #dc3545;
            color: white;
            text-decoration: none;
            border-radius: 5px;
            margin-top: 14px;
        }
        .btn:hover {
            background: #c82333;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Limpiar cache del sistema</h1>

        <?php
        $basePath = dirname(__DIR__);
        $report = [];

            // Limpieza de caches por archivos.
            $views = deleteFiles($basePath . '/storage/framework/views/*.php');
            $cache = deleteDirsFiles($basePath . '/storage/framework/cache/data');
            $sessions = deleteDirsFiles($basePath . '/storage/framework/sessions');

            $report[] = 'Views eliminadas: ' . $views;
            $report[] = 'Cache data eliminada: ' . $cache;
            $report[] = 'Sesiones eliminadas: ' . $sessions;

            // Intentar limpiar caches de Laravel si Artisan esta disponible.
            $artisanOk = false;
            $artisanErrors = [];
            $vendorAutoload = $basePath . '/vendor/autoload.php';
            $bootstrapApp = $basePath . '/bootstrap/app.php';
            if (file_exists($vendorAutoload) && file_exists($bootstrapApp)) {
                try {
                    require_once $vendorAutoload;
                    $app = require $bootstrapApp;
                    $app->make('Illuminate\\Contracts\\Console\\Kernel')->bootstrap();
                    \Illuminate\Support\Facades\Artisan::call('optimize:clear');
                    $artisanOk = true;
                } catch (Throwable $e) {
                    $artisanErrors[] = $e->getMessage();
                }
            }

            section('success', 'Limpieza completada', implode('<br>', $report));

            if ($artisanOk) {
                section('info', 'Artisan', 'Se ejecuto <code>optimize:clear</code> correctamente.');
            } else {
                section('info', 'Artisan', 'No se pudo ejecutar Artisan desde web. Es normal en algunos hostings.');
                if ($artisanErrors) {
                    section('error', 'Detalle', htmlspecialchars(implode(' | ', $artisanErrors)));
                }
            }

        section('info', 'Seguridad', 'Elimina este archivo despues de usarlo.');
        ?>

        <a href="/" class="btn">Volver al inicio</a>
    </div>
</body>
</html>
