use std::time::Duration;
use swarm_engine_core::prelude::*;
use swarm_engine_core::telemetry::create_swarm_layer;
use tracing_subscriber::prelude::*;
use crate::demo_agents::{CounterWorker, SimpleManager};
pub fn run_gui() {
let (swarm_layer, _tx, rx) = create_swarm_layer(2048);
tracing_subscriber::registry()
.with(swarm_layer)
.with(
tracing_subscriber::fmt::layer()
.with_target(false)
.with_level(true)
.compact(),
)
.init();
println!("=== SwarmEngine GUI ===");
println!("Starting...");
println!();
let _orchestrator_handle = std::thread::spawn(move || {
let rt = tokio::runtime::Runtime::new().expect("Failed to create Tokio runtime");
let mut orchestrator = OrchestratorBuilder::new()
.add_worker(CounterWorker::new(0, "worker-alpha"))
.add_worker(CounterWorker::new(1, "worker-beta"))
.add_worker(CounterWorker::new(2, "worker-gamma"))
.add_worker(CounterWorker::new(3, "worker-delta"))
.add_worker(CounterWorker::new(4, "worker-epsilon"))
.manager(SimpleManager::new())
.tick_duration(Duration::from_millis(50))
.max_ticks(0) .build(rt.handle().clone());
orchestrator.run()
});
if let Err(e) = swarm_engine_ui::ui::run_with_receiver(rx) {
eprintln!("UI error: {}", e);
}
println!("\nGUI closed.");
}