'; echo ' Verificando conexión a la base de datos...'; flush(); $db = Database::getInstance(); echo ' Conectado'; echo '
'; $steps[] = ['name' => 'Conexión DB', 'status' => 'success']; // PASO 2: Crear tabla de estados si no existe echo '
'; echo ' Creando tabla de estados de conversación...'; flush(); $sqlStates = file_get_contents(__DIR__ . '/migrations/add_conversation_states.sql'); $statementsStates = array_filter(array_map('trim', explode(';', $sqlStates))); foreach ($statementsStates as $statement) { if (!empty($statement) && substr($statement, 0, 6) !== 'SELECT') { $db->getConnection()->exec($statement); } } echo ' Completado'; echo '
'; $steps[] = ['name' => 'Tabla user_states', 'status' => 'success']; // PASO 3: Importar menús y respuestas automáticas echo '
'; echo ' Importando menús y respuestas automáticas...'; flush(); $sqlSetup = file_get_contents(__DIR__ . '/setup_laboratorio_ximena.sql'); $statementsSetup = array_filter(array_map('trim', explode(';', $sqlSetup))); $menuCount = 0; $responseCount = 0; foreach ($statementsSetup as $statement) { if (!empty($statement) && substr($statement, 0, 2) !== '--') { if (stripos($statement, 'INSERT INTO menus') !== false) { $menuCount++; } elseif (stripos($statement, 'INSERT INTO autoresponses') !== false) { $responseCount++; } try { $db->getConnection()->exec($statement); } catch (Exception $e) { // Ignorar errores de duplicados if (strpos($e->getMessage(), 'Duplicate entry') === false) { throw $e; } } } } echo " {$menuCount} menús, {$responseCount} respuestas"; echo '
'; $steps[] = ['name' => 'Menús y respuestas', 'status' => 'success']; // PASO 4: Verificar servicios echo '
'; echo ' Verificando servicios del sistema...'; flush(); $services = [ 'BusinessHoursService', 'ConversationStateService', 'NLPService', 'MenuService', 'PatientDataValidator', 'BotServiceLab' ]; $servicesOk = true; foreach ($services as $service) { $file = __DIR__ . "/services/{$service}.php"; if (!file_exists($file)) { echo " Falta {$service}.php"; $servicesOk = false; break; } } if ($servicesOk) { echo ' ' . count($services) . ' servicios verificados'; $steps[] = ['name' => 'Servicios', 'status' => 'success']; } else { $success = false; } echo '
'; // PASO 5: Obtener estadísticas echo '
'; echo ' Obteniendo estadísticas...'; flush(); $stmt = $db->query(" SELECT (SELECT COUNT(*) FROM menus WHERE is_active = 1) as menus_activos, (SELECT COUNT(*) FROM menu_options WHERE is_active = 1) as opciones_activas, (SELECT COUNT(*) FROM autoresponses WHERE is_active = 1) as respuestas_activas, (SELECT COUNT(*) FROM users) as total_usuarios "); $stats = $stmt->fetch(PDO::FETCH_ASSOC); echo ' Completado'; echo '
'; // Mostrar resumen if ($success) { echo '
'; echo '

¡Instalación Completada Exitosamente!

'; echo '
'; echo '
📊 Estadísticas del Sistema:
'; echo '
    '; echo "
  • Menús activos: {$stats['menus_activos']}
  • "; echo "
  • Opciones de menú: {$stats['opciones_activas']}
  • "; echo "
  • Respuestas automáticas: {$stats['respuestas_activas']}
  • "; echo "
  • Usuarios registrados: {$stats['total_usuarios']}
  • "; echo '
'; echo '
'; echo '
🚀 Próximos Pasos:
'; echo '
    '; echo '
  1. Configura tus credenciales de WhatsApp Business API en el panel de administración
  2. '; echo '
  3. Prueba el menú principal enviando un mensaje de WhatsApp
  4. '; echo '
  5. Revisa las respuestas automáticas en la sección correspondiente
  6. '; echo '
  7. Personaliza los mensajes según las necesidades del laboratorio
  8. '; echo '
'; echo ''; echo '
'; } } catch (Exception $e) { $success = false; echo '
'; echo ' Error: ' . htmlspecialchars($e->getMessage()); echo '
'; echo '
'; echo '

Error en la Instalación

'; echo '

Hubo un problema durante la instalación. Por favor:

'; echo '
    '; echo '
  1. Verifica que la base de datos existe y tiene permisos correctos
  2. '; echo '
  3. Revisa la configuración en config/config.php
  4. '; echo '
  5. Consulta el error arriba para más detalles
  6. '; echo '
  7. Intenta ejecutar la instalación nuevamente
  8. '; echo '
'; echo '
'; echo ''; echo '
'; echo '
'; } ?>
Documentación

Para más información sobre cómo usar el sistema: