use crate::app_state_container::AppStateContainer;
use crate::debug_service::DebugService;
use std::sync::Arc;
pub struct ServiceContainer {
pub debug_service: DebugService,
pub state_container: Arc<AppStateContainer>,
}
impl ServiceContainer {
pub fn new(state_container: Arc<AppStateContainer>) -> Self {
Self {
debug_service: DebugService::new(1000), state_container,
}
}
#[must_use]
pub fn clone_for_widget(&self) -> Self {
Self {
debug_service: self.debug_service.clone_service(),
state_container: Arc::clone(&self.state_container),
}
}
pub fn enable_debug(&self) {
self.debug_service.set_enabled(true);
self.debug_service
.info("ServiceContainer", "Debug mode enabled".to_string());
}
pub fn disable_debug(&self) {
self.debug_service
.info("ServiceContainer", "Debug mode disabled".to_string());
self.debug_service.set_enabled(false);
}
pub fn toggle_debug(&self) {
if self.debug_service.is_enabled() {
self.disable_debug();
} else {
self.enable_debug();
}
}
#[must_use]
pub fn generate_debug_dump(&self) -> String {
let mut dump = String::new();
dump.push_str(&self.state_container.debug_dump());
dump.push('\n');
dump.push_str(&self.debug_service.generate_dump());
dump.push('\n');
dump.push_str(&self.debug_service.generate_summary());
dump
}
}