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    #[must_use]
25    pub fn clone_for_widget(&self) -> Self {
26        Self {
27            debug_service: self.debug_service.clone_service(),
28            state_container: Arc::clone(&self.state_container),
29        }
30    }
31
32    /// Enable debug mode
33    pub fn enable_debug(&self) {
34        self.debug_service.set_enabled(true);
35        self.debug_service
36            .info("ServiceContainer", "Debug mode enabled".to_string());
37    }
38
39    /// Disable debug mode
40    pub fn disable_debug(&self) {
41        self.debug_service
42            .info("ServiceContainer", "Debug mode disabled".to_string());
43        self.debug_service.set_enabled(false);
44    }
45
46    /// Toggle debug mode
47    pub fn toggle_debug(&self) {
48        if self.debug_service.is_enabled() {
49            self.disable_debug();
50        } else {
51            self.enable_debug();
52        }
53    }
54
55    /// Generate a comprehensive debug dump
56    #[must_use]
57    pub fn generate_debug_dump(&self) -> String {
58        let mut dump = String::new();
59
60        // Add state container dump
61        dump.push_str(&self.state_container.debug_dump());
62        dump.push('\n');
63
64        // Add debug service log
65        dump.push_str(&self.debug_service.generate_dump());
66        dump.push('\n');
67
68        // Add debug summary
69        dump.push_str(&self.debug_service.generate_summary());
70
71        dump
72    }
73}