import { contextBridge, ipcRenderer } from 'electron' console.log('--- PRELOAD SCRIPT LOADED SUCCESSFULLY ---') contextBridge.exposeInMainWorld('electronAPI', { exportPDF: (title: string, htmlContent?: string) => ipcRenderer.invoke('export-pdf', title, htmlContent), selectHtmlFile: () => ipcRenderer.invoke('select-html-file'), updateTitlebarButtons: (symbolColor: string) => ipcRenderer.invoke('update-titlebar-buttons', symbolColor), onRemoteClipboardSyncToRemote: (callback: () => void) => { ipcRenderer.on('remote-clipboard-sync-to-remote', callback); return () => ipcRenderer.removeListener('remote-clipboard-sync-to-remote', callback); }, onRemoteClipboardSyncFromRemote: (callback: () => void) => { ipcRenderer.on('remote-clipboard-sync-from-remote', callback); return () => ipcRenderer.removeListener('remote-clipboard-sync-from-remote', callback); }, onRemoteClipboardAutoSync: (callback: (text: string) => void) => { const handler = (_event: Electron.IpcRendererEvent, text: string) => callback(text); ipcRenderer.on('remote-clipboard-auto-sync', handler); return () => ipcRenderer.removeListener('remote-clipboard-auto-sync', handler); }, onDownloadProgress: (callback: (data: { progress: number; id: string }) => void) => { const handler = (_event: Electron.IpcRendererEvent, data: { progress: number; id: string }) => callback(data); ipcRenderer.on('download-progress', handler); return () => ipcRenderer.removeListener('download-progress', handler); }, onUploadProgress: (callback: (data: { progress: number; id: string }) => void) => { const handler = (_event: Electron.IpcRendererEvent, data: { progress: number; id: string }) => callback(data); ipcRenderer.on('upload-progress', handler); return () => ipcRenderer.removeListener('upload-progress', handler); }, clipboardReadText: () => ipcRenderer.invoke('clipboard-read-text'), clipboardWriteText: (text: string) => ipcRenderer.invoke('clipboard-write-text', text), remoteFetchDrives: (serverHost: string, port: number, password?: string) => ipcRenderer.invoke('remote-fetch-drives', serverHost, port, password), remoteFetchFiles: (serverHost: string, port: number, filePath: string, password?: string) => ipcRenderer.invoke('remote-fetch-files', serverHost, port, filePath, password), remoteUploadFile: (id: string, serverHost: string, port: number, filePath: string, remotePath: string, password?: string) => ipcRenderer.invoke('remote-upload-file', id, serverHost, port, filePath, remotePath, password), remoteDownloadFile: (id: string, serverHost: string, port: number, fileName: string, remotePath: string, localPath: string, password?: string) => ipcRenderer.invoke('remote-download-file', id, serverHost, port, fileName, remotePath, localPath, password), opencodeStartServer: () => ipcRenderer.invoke('opencode-start-server'), opencodeStopServer: () => ipcRenderer.invoke('opencode-stop-server'), xcOpenCodeWebStart: () => ipcRenderer.invoke('xc-opencode-web-start'), xcOpenCodeWebStop: () => ipcRenderer.invoke('xc-opencode-web-stop'), xcOpenCodeWebGetStatus: () => ipcRenderer.invoke('xc-opencode-web-get-status'), xcOpenCodeWebGetPort: () => ipcRenderer.invoke('xc-opencode-web-get-port'), sddStart: () => ipcRenderer.invoke('sdd-start'), sddStop: () => ipcRenderer.invoke('sdd-stop'), sddGetStatus: () => ipcRenderer.invoke('sdd-get-status'), sddGetPort: () => ipcRenderer.invoke('sdd-get-port'), terminalStart: () => ipcRenderer.invoke('terminal-start'), terminalStop: () => ipcRenderer.invoke('terminal-stop'), terminalGetStatus: () => ipcRenderer.invoke('terminal-get-status'), terminalGetPort: () => ipcRenderer.invoke('terminal-get-port'), createWindow: (tabData: { route: string; title: string }) => ipcRenderer.invoke('create-window', tabData), transferTabData: (windowId: number, tabData: any) => ipcRenderer.invoke('transfer-tab-data', windowId, tabData), onTabDataReceived: (callback: (tabData: any) => void) => { const handler = (_event: Electron.IpcRendererEvent, tabData: any) => callback(tabData); ipcRenderer.on('tab-data-received', handler); return () => ipcRenderer.removeListener('tab-data-received', handler); }, windowMinimize: () => ipcRenderer.invoke('window-minimize'), windowMaximize: () => ipcRenderer.invoke('window-maximize'), windowClose: () => ipcRenderer.invoke('window-close'), windowIsMaximized: () => ipcRenderer.invoke('window-is-maximized'), })