<?php
/**
 * Script de configuración y mantenimiento automatizado para Orion Red en Hosting Compartido.
 */

// Configuración de Seguridad
$validToken = 'orion-red-2026';
$token = $_GET['token'] ?? '';

if (empty($token) || $token !== $validToken) {
    header('HTTP/1.1 403 Forbidden');
    die('Acceso no autorizado. Especifique un token válido: ?token=TU_TOKEN');
}

// Desactivar límite de tiempo
@set_time_limit(0);

// Detectar base path
if (file_exists(__DIR__ . '/vendor/autoload.php')) {
    $basePath = __DIR__;
} elseif (file_exists(__DIR__ . '/../vendor/autoload.php')) {
    $basePath = dirname(__DIR__);
} else {
    header('Content-Type: text/html; charset=utf-8');
    echo "<h2>❌ Error Crítico de Despliegue</h2>";
    echo "<p>No se encontró el directorio <code>vendor/autoload.php</code>. Asegúrese de subir las dependencias de Composer o verificar la ubicación de este archivo.</p>";
    exit;
}

// Registrar el autoloader y cargar la aplicación
require $basePath . '/vendor/autoload.php';
$app = require_once $basePath . '/bootstrap/app.php';

use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;

$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$kernel->bootstrap();

$action = $_GET['action'] ?? 'menu';
$outputMessage = '';
$success = true;

try {
    switch ($action) {
        case 'install':
            // Instalación completa
            $logs = [];
            
            // 1. APP_KEY
            if (empty(env('APP_KEY'))) {
                Artisan::call('key:generate', ['--force' => true]);
                $logs[] = "🔑 APP_KEY Generada con éxito.";
            } else {
                $logs[] = "🔑 APP_KEY ya existente.";
            }
            
            // 2. Migraciones
            Artisan::call('migrate', ['--force' => true]);
            $logs[] = "🗄️ Migraciones ejecutadas:\n" . Artisan::output();
            
            // 3. Seeders
            Artisan::call('db:seed', ['--force' => true]);
            $logs[] = "🌱 Semillas (Seeders) ejecutadas:\n" . Artisan::output();
            
            // 4. Enlace simbólico de storage
            try {
                Artisan::call('storage:link');
                $logs[] = "🔗 Enlace de almacenamiento creado.";
            } catch (\Exception $e) {
                $logs[] = "⚠️ Nota sobre enlace de almacenamiento: " . $e->getMessage();
            }
            
            // 5. Cachear
            Artisan::call('config:cache');
            Artisan::call('route:cache');
            Artisan::call('view:cache');
            $logs[] = "⚡ Caché de producción generada.";
            
            $outputMessage = implode("\n\n", $logs);
            break;
            
        case 'key':
            Artisan::call('key:generate', ['--force' => true]);
            $outputMessage = "🔑 Nueva APP_KEY generada:\n" . Artisan::output();
            break;
            
        case 'migrate':
            Artisan::call('migrate', ['--force' => true]);
            $outputMessage = "🗄️ Migración finalizada:\n" . Artisan::output();
            break;
            
        case 'seed':
            Artisan::call('db:seed', ['--force' => true]);
            $outputMessage = "🌱 Semillas finalizadas:\n" . Artisan::output();
            break;
            
        case 'cache_clear':
            Artisan::call('config:clear');
            Artisan::call('route:clear');
            Artisan::call('view:clear');
            Artisan::call('cache:clear');
            $outputMessage = "🧹 Caché del sistema limpia:\n" . Artisan::output();
            break;
            
        case 'cache_warm':
            Artisan::call('config:cache');
            Artisan::call('route:cache');
            Artisan::call('view:cache');
            $outputMessage = "⚡ Caché de producción configurada con éxito:\n" . Artisan::output();
            break;
            
        case 'link':
            Artisan::call('storage:link');
            $outputMessage = "🔗 Enlace simbólico de almacenamiento creado:\n" . Artisan::output();
            break;
            
        case 'check':
            $status = [];
            $status[] = "📍 PHP Versión: " . PHP_VERSION;
            $status[] = "📍 Base Path: " . $basePath;
            
            // Comprobación de Base de datos
            try {
                DB::connection()->getPdo();
                $status[] = "✅ Conexión a Base de Datos: Exitosa (Base: " . DB::connection()->getDatabaseName() . ")";
            } catch (\Exception $e) {
                $status[] = "❌ Conexión a Base de Datos Fallida: " . $e->getMessage();
                $success = false;
            }
            
            // Comprobación de carpetas de almacenamiento
            $writableDirs = [
                $basePath . '/storage',
                $basePath . '/storage/framework/cache',
                $basePath . '/storage/framework/sessions',
                $basePath . '/storage/framework/views',
                $basePath . '/storage/logs',
                $basePath . '/bootstrap/cache'
            ];
            
            foreach ($writableDirs as $dir) {
                if (is_writable($dir)) {
                    $status[] = "✅ Permiso de escritura: " . str_replace($basePath, '', $dir);
                } else {
                    $status[] = "❌ Sin permiso de escritura: " . str_replace($basePath, '', $dir);
                    $success = false;
                }
            }
            
            $outputMessage = implode("\n", $status);
            break;
            
        case 'self_destruct':
            $filePath = __FILE__;
            if (unlink($filePath)) {
                $outputMessage = "🔥 El script run_setup.php se ha eliminado con éxito por seguridad.";
            } else {
                $outputMessage = "⚠️ No se pudo eliminar el archivo automáticamente. Por favor, elimine run_setup.php manualmente de su servidor.";
                $success = false;
            }
            break;
            
        case 'menu':
        default:
            renderMenu($token);
            exit;
    }
} catch (\Exception $e) {
    $success = false;
    $outputMessage = "❌ Ocurrió un error al ejecutar la acción:\n" . $e->getMessage() . "\n\nDetalle:\n" . $e->getTraceAsString();
}

renderResponse($action, $success, $outputMessage, $token);

function renderMenu($token) {
    ?>
    <!DOCTYPE html>
    <html lang="es">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Orion Red - Asistente de Despliegue</title>
        <link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;600;800&display=swap" rel="stylesheet">
        <style>
            :root {
                --bg: #F3F4F6;
                --card-bg: #FFFFFF;
                --text: #1F2937;
                --primary: #7B52F2;
                --success: #10B981;
                --danger: #EF4444;
                --border: #E5E7EB;
            }
            body {
                font-family: 'Outfit', sans-serif;
                background-color: var(--bg);
                color: var(--text);
                margin: 0;
                padding: 40px 20px;
                display: flex;
                justify-content: center;
                align-items: center;
                min-height: 100vh;
                box-sizing: border-box;
            }
            .container {
                width: 100%;
                max-width: 600px;
                background: var(--card-bg);
                border-radius: 24px;
                box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05), 0 8px 10px -6px rgba(0, 0, 0, 0.05);
                padding: 32px;
                border: 1px solid var(--border);
            }
            .header {
                text-align: center;
                margin-bottom: 30px;
            }
            .header h1 {
                margin: 0;
                font-size: 24px;
                font-weight: 800;
                color: var(--primary);
            }
            .header p {
                margin: 5px 0 0 0;
                color: #6B7280;
                font-size: 14px;
            }
            .menu-grid {
                display: grid;
                grid-template-columns: 1fr;
                gap: 12px;
            }
            .btn {
                display: flex;
                justify-content: space-between;
                align-items: center;
                padding: 16px 20px;
                background: #F9FAFB;
                border: 1px solid var(--border);
                border-radius: 16px;
                text-decoration: none;
                color: var(--text);
                font-weight: 600;
                transition: all 0.2s ease;
            }
            .btn:hover {
                background: #F3F4F6;
                border-color: var(--primary);
                transform: translateY(-1px);
            }
            .btn-primary {
                background: var(--primary);
                color: white;
                border-color: var(--primary);
            }
            .btn-primary:hover {
                background: #693ee0;
                border-color: #693ee0;
                color: white;
            }
            .btn-danger {
                background: #FEF2F2;
                color: var(--danger);
                border-color: #FEE2E2;
            }
            .btn-danger:hover {
                background: #FEE2E2;
                border-color: var(--danger);
            }
            .desc {
                font-size: 11px;
                color: #6B7280;
                font-weight: 400;
                margin-top: 2px;
                display: block;
            }
            .label {
                display: flex;
                flex-direction: column;
            }
            .arrow {
                font-size: 18px;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="header">
                <h1>Orion Red</h1>
                <p>Asistente de Despliegue en Hosting Compartido</p>
            </div>
            <div class="menu-grid">
                <a class="btn btn-primary" href="?token=<?php echo $token; ?>&action=install">
                    <span class="label">
                        <span>🚀 Configuración Inicial Automática</span>
                        <span class="desc" style="color: rgba(255,255,255,0.85)">Ejecuta llave, migraciones, seeders y caché de producción</span>
                    </span>
                    <span class="arrow">→</span>
                </a>
                <a class="btn" href="?token=<?php echo $token; ?>&action=check">
                    <span class="label">
                        <span>🔍 Diagnóstico del Sistema</span>
                        <span class="desc">Comprueba la base de datos, permisos de carpetas y versiones</span>
                    </span>
                    <span class="arrow">→</span>
                </a>
                <a class="btn" href="?token=<?php echo $token; ?>&action=migrate">
                    <span class="label">
                        <span>🗄️ Ejecutar Migraciones</span>
                        <span class="desc">Corre php artisan migrate --force</span>
                    </span>
                    <span class="arrow">→</span>
                </a>
                <a class="btn" href="?token=<?php echo $token; ?>&action=seed">
                    <span class="label">
                        <span>🌱 Cargar Semillas (Seeders)</span>
                        <span class="desc">Corre php artisan db:seed --force</span>
                    </span>
                    <span class="arrow">→</span>
                </a>
                <a class="btn" href="?token=<?php echo $token; ?>&action=cache_warm">
                    <span class="label">
                        <span>⚡ Cachear para Producción</span>
                        <span class="desc">Genera caché de configuración, rutas y vistas</span>
                    </span>
                    <span class="arrow">→</span>
                </a>
                <a class="btn" href="?token=<?php echo $token; ?>&action=cache_clear">
                    <span class="label">
                        <span>🧹 Limpiar Cachés</span>
                        <span class="desc">Limpia toda la caché guardada del sistema</span>
                    </span>
                    <span class="arrow">→</span>
                </a>
                <a class="btn" href="?token=<?php echo $token; ?>&action=link">
                    <span class="label">
                        <span>🔗 Crear Enlace Storage</span>
                        <span class="desc">Crea el link storage:link si es permitido</span>
                    </span>
                    <span class="arrow">→</span>
                </a>
                <a class="btn btn-danger" href="?token=<?php echo $token; ?>&action=self_destruct" onclick="return confirm('¿Está seguro de eliminar este script de autoinstalación?');">
                    <span class="label">
                        <span>🔥 Autodestrucción del Asistente</span>
                        <span class="desc">Elimina run_setup.php por motivos de seguridad</span>
                    </span>
                    <span class="arrow">→</span>
                </a>
            </div>
        </div>
    </body>
    </html>
    <?php
}

function renderResponse($action, $success, $message, $token) {
    ?>
    <!DOCTYPE html>
    <html lang="es">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Orion Red - Resultado del Asistente</title>
        <link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;600;800&display=swap" rel="stylesheet">
        <style>
            :root {
                --bg: #F3F4F6;
                --card-bg: #FFFFFF;
                --text: #1F2937;
                --primary: #7B52F2;
                --success: #10B981;
                --danger: #EF4444;
                --border: #E5E7EB;
            }
            body {
                font-family: 'Outfit', sans-serif;
                background-color: var(--bg);
                color: var(--text);
                margin: 0;
                padding: 40px 20px;
                display: flex;
                justify-content: center;
                align-items: center;
                min-height: 100vh;
                box-sizing: border-box;
            }
            .container {
                width: 100%;
                max-width: 650px;
                background: var(--card-bg);
                border-radius: 24px;
                box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05), 0 8px 10px -6px rgba(0, 0, 0, 0.05);
                padding: 32px;
                border: 1px solid var(--border);
            }
            .header {
                text-align: center;
                margin-bottom: 24px;
            }
            .header h1 {
                margin: 0;
                font-size: 22px;
                font-weight: 800;
                color: <?php echo $success ? 'var(--success)' : 'var(--danger)'; ?>;
            }
            .header p {
                margin: 5px 0 0 0;
                color: #6B7280;
                font-size: 14px;
            }
            .console {
                background: #111827;
                color: #F9FAFB;
                font-family: 'Courier New', Courier, monospace;
                font-size: 12.5px;
                padding: 16px 20px;
                border-radius: 12px;
                overflow-x: auto;
                white-space: pre-wrap;
                max-height: 350px;
                border: 1px solid #374151;
                text-align: left;
                margin-bottom: 24px;
            }
            .footer-actions {
                display: flex;
                gap: 10px;
            }
            .btn {
                flex: 1;
                text-align: center;
                padding: 14px;
                background: #F9FAFB;
                border: 1px solid var(--border);
                border-radius: 14px;
                text-decoration: none;
                color: var(--text);
                font-weight: 600;
                transition: all 0.2s ease;
            }
            .btn:hover {
                background: #F3F4F6;
                transform: translateY(-1px);
            }
            .btn-primary {
                background: var(--primary);
                color: white;
                border-color: var(--primary);
            }
            .btn-primary:hover {
                background: #693ee0;
                border-color: #693ee0;
                color: white;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="header">
                <h1><?php echo $success ? '✅ Proceso Completado' : '❌ Error detectado'; ?></h1>
                <p>Acción realizada: <strong><?php echo htmlspecialchars($action); ?></strong></p>
            </div>
            <div class="console"><?php echo htmlspecialchars($message); ?></div>
            <div class="footer-actions">
                <a class="btn" href="?token=<?php echo $token; ?>">Volver al Menú</a>
                <?php if ($action !== 'self_destruct'): ?>
                    <a class="btn btn-primary" href="/index.html">Ir a la Aplicación</a>
                <?php endif; ?>
            </div>
        </div>
    </body>
    </html>
    <?php
}
