/// Interface for window manager operations
/// 
/// This interface abstracts window manager-specific operations to provide
/// a consistent API for querying window information across different
/// window managers (Hyprland, Sway, etc.)
abstract interface class IWindowManager {
  /// Get information about the currently active/focused window
  /// 
  /// Returns a map containing:
  /// - 'application': Application identifier (class/app_id)  
  /// - 'title': Window title
  /// - 'pid': Process ID (if available)
  /// - 'workspace': Current workspace (if available)
  /// 
  /// Returns null if no active window or on error
  Future<Map<String, dynamic>?> getCurrentWindow();

  /// Get the application identifier of the active window
  /// 
  /// Returns the application class/app_id, or 'unknown' if unavailable
  Future<String> getActiveApplication();

  /// Get the title of the active window
  /// 
  /// Returns the window title, or empty string if unavailable
  Future<String> getWindowTitle();

  /// Get the current workspace information
  /// 
  /// Returns a map containing workspace details, or null if unavailable
  Future<Map<String, dynamic>?> getCurrentWorkspace();

  /// Check if the window manager is available and responding
  Future<bool> isAvailable();

  /// Get version information about the window manager
  Future<String?> getVersion();

  /// Get current cursor position in global coordinates
  /// 
  /// Returns a map containing:
  /// - 'x': X coordinate in pixels
  /// - 'y': Y coordinate in pixels
  /// 
  /// Returns null if cursor position is unavailable or on error
  Future<Map<String, int>?> getCursorPosition();

  /// Get the window manager type identifier
  String get managerType;
}