use std::sync::Arc;
use super::capabilities::PlatformCapabilities;
use crate::services::app::app_enumerator::AppEnumerator;
use crate::services::app::app_launcher::AppLauncher;
use crate::services::autostart::AutoStartManager;
use crate::services::clipboard::ClipboardManager;
use crate::services::focus_monitor::FocusMonitor;
use crate::services::hotkey::HotkeyManager;
use crate::services::icon::icon_extractor::IconExtractor;
use crate::services::installation_monitor::InstallationMonitor;
use crate::services::parameter::provider::SystemParameterProvider;
use crate::services::path::path_resolver::PathResolver;
use crate::services::shell::lnk_resolver::LnkResolver;
use crate::services::shell::resource_loader::ResourceLoader;
use crate::services::shell::ShellExecutor;
use crate::services::theme::ThemeProvider;
use crate::services::window::{WindowManager, WindowPositioner};
pub struct PlatformServices {
pub capabilities: PlatformCapabilities,
pub icon_extractor: Arc<dyn IconExtractor>,
pub shell_executor: Arc<dyn ShellExecutor>,
pub window_manager: Arc<dyn WindowManager>,
pub window_positioner: Arc<dyn WindowPositioner>,
pub path_resolver: Arc<dyn PathResolver>,
pub app_enumerator: Arc<dyn AppEnumerator>,
pub app_launcher: Arc<dyn AppLauncher>,
pub lnk_resolver: Arc<dyn LnkResolver>,
pub resource_loader: Arc<dyn ResourceLoader>,
pub clipboard_provider: Arc<dyn SystemParameterProvider>,
pub window_handle_provider: Arc<dyn SystemParameterProvider>,
pub selection_provider: Arc<dyn SystemParameterProvider>,
pub autostart_manager: Arc<dyn AutoStartManager>,
pub hotkey_manager: Arc<dyn HotkeyManager>,
pub installation_monitor: Arc<dyn InstallationMonitor>,
pub focus_monitor: Arc<dyn FocusMonitor>,
pub clipboard_manager: Arc<dyn ClipboardManager>,
pub theme_provider: Arc<dyn ThemeProvider>,
}