1use carch_core::error::{CarchError, Result};
2use carch_core::extract_scripts;
3use carch_core::ui::render::run_ui_with_options;
4use carch_core::ui::state::UiOptions;
5use log::{error, info};
6use tempfile::TempDir;
7
8pub mod args;
9pub mod commands;
10
11use crate::args::Settings;
12
13pub fn run_tui(settings: Settings) -> Result<()> {
14 if settings.log_mode {
15 info!("Starting TUI application");
16 }
17
18 let temp_dir = TempDir::new().map_err(|e| CarchError::TempDir(e.to_string()))?;
19 let scripts_path = temp_dir.path();
20 extract_scripts(scripts_path)?;
21
22 if settings.log_mode {
23 info!("Using scripts directory: {}", scripts_path.display());
24 }
25
26 let modules_dir = scripts_path.join("modules");
27 if !modules_dir.exists() || !modules_dir.is_dir() {
28 let error_msg = format!("Modules directory not found at {}", modules_dir.display());
29 error!("{error_msg}");
30 return Err(CarchError::ModulesDirNotFound(error_msg));
31 }
32
33 let ui_options = UiOptions {
34 log_mode: settings.log_mode,
35 theme: settings.theme,
36 theme_locked: settings.theme_locked,
37 is_root: std::env::var("USER").unwrap_or_default() == "root",
38 };
39
40 if settings.log_mode {
41 info!("TUI initialized with settings: log_mode={}", settings.log_mode);
42 }
43
44 let result = run_ui_with_options(&modules_dir, ui_options);
45
46 if settings.log_mode {
47 info!("Carch application exiting normally");
48 }
49
50 result
51}