Acceso denegado. Usa: run_now.php?key=betsmart2024&step=analyze'); } $step = $_GET['step'] ?? 'analyze'; // Aumentar tiempo máximo de ejecución set_time_limit(300); ini_set('display_errors', '1'); error_reporting(E_ALL); echo "
";
echo "=== BetSmart Run Now — Paso: {$step} ===\n";
echo "Hora Lima: " . (new DateTime('now', new DateTimeZone('America/Lima')))->format('d/m/Y H:i:s') . "\n\n";

// Detectar rutas
$base = dirname(__DIR__);
$scripts = [
    'fetch'    => $base . '/fetcher.php',
    'analyze'  => $base . '/ai_processor.php',
    'consensus'=> $base . '/consensus.php',
    'cron'     => $base . '/cron.php',
];

if (!isset($scripts[$step])) {
    echo "Paso desconocido: {$step}\n";
    echo "Pasos válidos: fetch, analyze, consensus, cron\n";
    exit;
}

$file = $scripts[$step];

if (!file_exists($file)) {
    echo "❌ Archivo no encontrado: {$file}\n";
    echo "Archivos en {$base}:\n";
    foreach (glob($base . '/*.php') as $f) {
        echo "  " . basename($f) . "\n";
    }
    exit;
}

echo "✓ Ejecutando: {$file}\n";
echo str_repeat('-', 50) . "\n";
flush();
ob_flush();

// Capturar output del script
ob_start();
try {
    require $file;
} catch (Throwable $e) {
    echo "\n❌ ERROR: " . $e->getMessage() . "\n";
    echo "Línea: " . $e->getLine() . " en " . $e->getFile() . "\n";
}
$output = ob_get_clean();

// Mostrar output con colores
$lines = explode("\n", $output);
foreach ($lines as $line) {
    if (str_contains($line, '[ERROR]')) echo "" . htmlspecialchars($line) . "\n";
    elseif (str_contains($line, '[WARN]')) echo "" . htmlspecialchars($line) . "\n";
    elseif (str_contains($line, '[INFO]')) echo "" . htmlspecialchars($line) . "\n";
    else echo htmlspecialchars($line) . "\n";
}

echo "\n" . str_repeat('-', 50) . "\n";
echo "✓ Finalizado.\n\n";
echo "Otros pasos:\n";
echo "→ Ejecutar Fetcher\n";
echo "→ Ejecutar AI Processor\n";
echo "→ Ejecutar Cron completo\n";
echo "
";