import type { BrowserWindow } from 'electron'; import type { BaseWindowTracker } from '../window-trackers'; import type { WindowGeometry } from '../types'; import { updateVisibleOverlayVisibility } from '../core/services'; export interface OverlayVisibilityRuntimeDeps { getMainWindow: () => BrowserWindow | null; getVisibleOverlayVisible: () => boolean; getWindowTracker: () => BaseWindowTracker | null; getTrackerNotReadyWarningShown: () => boolean; setTrackerNotReadyWarningShown: (shown: boolean) => void; updateVisibleOverlayBounds: (geometry: WindowGeometry) => void; ensureOverlayWindowLevel: (window: BrowserWindow) => void; syncPrimaryOverlayWindowLayer: (layer: 'visible') => void; enforceOverlayLayerOrder: () => void; syncOverlayShortcuts: () => void; isMacOSPlatform: () => boolean; showOverlayLoadingOsd: (message: string) => void; resolveFallbackBounds: () => WindowGeometry; } export interface OverlayVisibilityRuntimeService { updateVisibleOverlayVisibility: () => void; } export function createOverlayVisibilityRuntimeService( deps: OverlayVisibilityRuntimeDeps, ): OverlayVisibilityRuntimeService { return { updateVisibleOverlayVisibility(): void { updateVisibleOverlayVisibility({ visibleOverlayVisible: deps.getVisibleOverlayVisible(), mainWindow: deps.getMainWindow(), windowTracker: deps.getWindowTracker(), trackerNotReadyWarningShown: deps.getTrackerNotReadyWarningShown(), setTrackerNotReadyWarningShown: (shown: boolean) => { deps.setTrackerNotReadyWarningShown(shown); }, updateVisibleOverlayBounds: (geometry: WindowGeometry) => deps.updateVisibleOverlayBounds(geometry), ensureOverlayWindowLevel: (window: BrowserWindow) => deps.ensureOverlayWindowLevel(window), syncPrimaryOverlayWindowLayer: (layer: 'visible') => deps.syncPrimaryOverlayWindowLayer(layer), enforceOverlayLayerOrder: () => deps.enforceOverlayLayerOrder(), syncOverlayShortcuts: () => deps.syncOverlayShortcuts(), isMacOSPlatform: deps.isMacOSPlatform(), showOverlayLoadingOsd: (message: string) => deps.showOverlayLoadingOsd(message), resolveFallbackBounds: () => deps.resolveFallbackBounds(), }); }, }; }