mod web_server; mod state; mod console_ui; mod config; mod chromium; mod headless; use state::{SharedState, Status}; #[tokio::main] async fn main() -> Result<(), Box> { println!("Aurora Core gestartet!"); //config Datei Lesen let exe_dir = std::env::current_exe()?.parent().unwrap().to_path_buf(); let mut cfg = config::read_config(&exe_dir)?; // Gemeinsamen Status anlegen let state: SharedState = std::sync::Arc::new(std::sync::Mutex::new(Status { web_server_active: false, plugin_engine_active: false, chromium: Default::default(), headless: Default::default(), loaded_plugins: vec![], running_jobs: vec![], })); // UI sofort anzeigen – läuft in eigenem Thread let ui_state = state.clone(); let ui_thread = std::thread::spawn(move || { // UI blockiert hier bis q/ESC – aber nur in DIESEM Thread let _ = console_ui::start_ui(ui_state); }); //Chromium Check + Download chromium::start_check(&mut cfg, &exe_dir, state.clone()).await?; // Webserver im Hintergrund starten let _server = web_server::start(state.clone(), cfg.server.port).await?; // Headless Engine starten (Stub → Starting → Ready) headless::start(state.clone()).await?; // Main-Thread bleibt bis UI beendet wird (q/ESC) let _ = ui_thread.join(); // (Optional) Nach UI-Ende Webserver-Task abbrechen: // _server.abort(); Ok(()) }