doum_cli/cli/config/
logging.rs

1// Logging Configuration Menu
2
3use crate::system::error::Result;
4use crate::system::config::{load_config, save_config};
5use crate::cli::menu::{Menu, MenuItem};
6use crate::cli::tui::ratatui_select;
7
8/// Logging configuration menu
9pub fn run_logging_menu() -> Result<()> {
10    loop {
11        let config = load_config()?;
12        
13        // Create menu with current values in descriptions
14        let menu = Menu::builder("Logging Settings")
15            .with_back()
16            .add_item(
17                "enabled",
18                format!("Enabled [current: {}]", config.logging.enabled),
19                format!("Enable/disable logging (currently: {})", config.logging.enabled)
20            )
21            .add_item(
22                "level",
23                format!("Level [current: {}]", config.logging.level),
24                format!("Log level (currently: {})", config.logging.level)
25            )
26            .build();
27        
28        let selected = ratatui_select(
29            "šŸ“ Logging Configuration",
30            &menu.items,
31            Some("↑↓: Navigate | Enter: Select | Esc/q: Cancel"),
32            None
33        )?;
34        
35        match selected {
36            Some(item) => {
37                match item.id.as_str() {
38                    "back" => break,
39                    "exit" => {
40                        println!("\nšŸ‘‹ Goodbye!");
41                        std::process::exit(0);
42                    }
43                    "enabled" => {
44                        edit_logging_enabled()?;
45                    }
46                    "level" => {
47                        edit_logging_level()?;
48                    }
49                    _ => {
50                        println!("\nāš ļø  Unknown option");
51                    }
52                }
53            }
54            None => break,
55        }
56    }
57    
58    Ok(())
59}
60
61/// Edit logging enabled setting
62fn edit_logging_enabled() -> Result<()> {
63    let mut config = load_config()?;
64    let current = config.logging.enabled;
65    
66    let menu_items = vec![
67        MenuItem::new("true", "Enabled", "Enable logging"),
68        MenuItem::new("false", "Disabled", "Disable logging"),
69    ];
70    
71    let current_str = if current { "true" } else { "false" };
72    
73    let selected = ratatui_select(
74        "Enable Logging",
75        &menu_items,
76        Some("↑↓: Navigate | Enter: Select | Esc/q: Cancel"),
77        Some(current_str)
78    )?;
79    
80    if let Some(item) = selected {
81        config.logging.enabled = item.id == "true";
82        save_config(&config)?;
83        println!("āœ… Setting saved: enabled = {}", config.logging.enabled);
84    }
85    
86    Ok(())
87}
88
89/// Edit log level
90fn edit_logging_level() -> Result<()> {
91    let mut config = load_config()?;
92    
93    let menu_items = vec![
94        MenuItem::new("debug", "Debug", "Debug level - Most verbose"),
95        MenuItem::new("info", "Info", "Info level - General information"),
96        MenuItem::new("warn", "Warn", "Warn level - Warnings only"),
97        MenuItem::new("error", "Error", "Error level - Errors only"),
98    ];
99    
100    let selected = ratatui_select(
101        "Select Log Level",
102        &menu_items,
103        Some("↑↓: Navigate | Enter: Select | Esc/q: Cancel"),
104        Some(&config.logging.level)
105    )?;
106    
107    if let Some(item) = selected {
108        config.logging.level = item.id.clone();
109        save_config(&config)?;
110        println!("āœ… Setting saved: level = {}", config.logging.level);
111    }
112    
113    Ok(())
114}