sql_cli/
service_container.rs

1use crate::app_state_container::AppStateContainer;
2use crate::debug_service::DebugService;
3use std::sync::Arc;
4
5/// Container for shared services that widgets can access
6/// This provides dependency injection for widgets
7pub struct ServiceContainer {
8    /// Debug service for logging and diagnostics
9    pub debug_service: DebugService,
10
11    /// Reference to the application state container
12    pub state_container: Arc<AppStateContainer>,
13}
14
15impl ServiceContainer {
16    pub fn new(state_container: Arc<AppStateContainer>) -> Self {
17        Self {
18            debug_service: DebugService::new(1000), // Keep last 1000 debug entries
19            state_container,
20        }
21    }
22
23    /// Clone the service container (for sharing with widgets)
24    pub fn clone_for_widget(&self) -> Self {
25        Self {
26            debug_service: self.debug_service.clone_service(),
27            state_container: Arc::clone(&self.state_container),
28        }
29    }
30
31    /// Enable debug mode
32    pub fn enable_debug(&self) {
33        self.debug_service.set_enabled(true);
34        self.debug_service
35            .info("ServiceContainer", "Debug mode enabled".to_string());
36    }
37
38    /// Disable debug mode
39    pub fn disable_debug(&self) {
40        self.debug_service
41            .info("ServiceContainer", "Debug mode disabled".to_string());
42        self.debug_service.set_enabled(false);
43    }
44
45    /// Toggle debug mode
46    pub fn toggle_debug(&self) {
47        if self.debug_service.is_enabled() {
48            self.disable_debug();
49        } else {
50            self.enable_debug();
51        }
52    }
53
54    /// Generate a comprehensive debug dump
55    pub fn generate_debug_dump(&self) -> String {
56        let mut dump = String::new();
57
58        // Add state container dump
59        dump.push_str(&self.state_container.debug_dump());
60        dump.push_str("\n");
61
62        // Add debug service log
63        dump.push_str(&self.debug_service.generate_dump());
64        dump.push_str("\n");
65
66        // Add debug summary
67        dump.push_str(&self.debug_service.generate_summary());
68
69        dump
70    }
71}