import { ipcMain } from "electron"; import type { BooleanResult, FocusGenshinResult, RuntimeInfo, SaveSnapshotResult, ScannerStatusPayload, } from "../../src/types/global.js"; import type { AppSnapshot } from "../../src/types/domain.js"; interface AppCommandDependencies { focusMainWindow: () => BooleanResult; moveMainWindowOffGenshin: () => Promise; focusGenshinForScanStart: () => Promise; publishScannerStatus: (status: ScannerStatusPayload) => Promise; getRuntimeInfo: () => Promise; loadSnapshot: () => Promise; saveSnapshot: (snapshot: AppSnapshot) => Promise; runMockScan: () => Promise; showOverlay: () => Promise; hideOverlay: () => Promise; } export function registerAppHandlers({ focusMainWindow, moveMainWindowOffGenshin, focusGenshinForScanStart, publishScannerStatus, getRuntimeInfo, loadSnapshot, saveSnapshot, runMockScan, showOverlay, hideOverlay, }: AppCommandDependencies) { ipcMain.handle("app:focusMainWindow", async () => focusMainWindow()); ipcMain.handle("automation:focusGenshin", async () => { await moveMainWindowOffGenshin(); return focusGenshinForScanStart(); }); ipcMain.handle("scanner:publishStatus", async (_event, status: ScannerStatusPayload) => { await publishScannerStatus(status); return { ok: true }; }); ipcMain.handle("app:getRuntimeInfo", async () => getRuntimeInfo()); ipcMain.handle("snapshot:load", async () => loadSnapshot()); ipcMain.handle("snapshot:save", async (_event, snapshot: AppSnapshot) => saveSnapshot(snapshot)); ipcMain.handle("scan:runMock", async () => runMockScan()); ipcMain.handle("overlay:show", () => showOverlay()); ipcMain.handle("overlay:hide", () => hideOverlay()); }