const { contextBridge, ipcRenderer } = require("electron");

contextBridge.exposeInMainWorld("assistantApi", {
  loadSnapshot: () => ipcRenderer.invoke("snapshot:load"),
  saveSnapshot: (snapshot) => ipcRenderer.invoke("snapshot:save", snapshot),
  runMockScan: () => ipcRenderer.invoke("scan:runMock"),
  listCaptureSources: () => ipcRenderer.invoke("capture:listSources"),
  captureSource: (sourceId, delayMs = 0, focusGenshin = false, options) => ipcRenderer.invoke("capture:captureSource", sourceId, delayMs, focusGenshin, options),
  clickScreen: (x, y) => ipcRenderer.invoke("automation:clickScreen", x, y),
  scrollScreen: (notches, anchorX, anchorY) => ipcRenderer.invoke("automation:scrollScreen", notches, anchorX, anchorY),
  getAutomationGuard: () => ipcRenderer.invoke("automation:getGuard"),
  focusMainWindow: () => ipcRenderer.invoke("app:focusMainWindow"),
  focusGenshin: () => ipcRenderer.invoke("automation:focusGenshin"),
  getRuntimeInfo: () => ipcRenderer.invoke("app:getRuntimeInfo"),
  saveReviewSample: (sample) => ipcRenderer.invoke("review:saveSample", sample),
  loadReviewSamples: (limit = 50) => ipcRenderer.invoke("review:loadSamples", limit),
  loadScannerLearningRules: () => ipcRenderer.invoke("scanner:loadLearningRules"),
  saveScannerLearningRules: (rules) => ipcRenderer.invoke("scanner:saveLearningRules", rules),
  loadArtifacts: () => ipcRenderer.invoke("artifacts:load"),
  saveArtifacts: (records) => ipcRenderer.invoke("artifacts:saveMany", records),
  exportGood: (payload) => ipcRenderer.invoke("good:export", payload),
  publishScannerStatus: (status) => ipcRenderer.invoke("scanner:publishStatus", status),
  showOverlay: () => ipcRenderer.invoke("overlay:show"),
  hideOverlay: () => ipcRenderer.invoke("overlay:hide"),
  onScannerCommand: (callback) => {
    const listener = (_event, command) => callback(command);
    ipcRenderer.on("scanner:command", listener);
    return () => ipcRenderer.removeListener("scanner:command", listener);
  },
});
