const { app, BrowserWindow, ipcMain } = require('electron'); const path = require('path'); const isDev = process.env.NODE_ENV === 'development'; let mainWindow; function createWindow() { mainWindow = new BrowserWindow({ width: 1200, height: 800, minWidth: 800, minHeight: 600, icon: path.join(__dirname, 'public', 'icon.png'), webPreferences: { nodeIntegration: false, contextIsolation: true, preload: path.join(__dirname, 'preload.js'), }, autoHideMenuBar: true, titleBarStyle: 'default', backgroundColor: '#ffffff', }); // Load the app if (isDev) { // Development: load from Next.js dev server mainWindow.loadURL('http://localhost:3000'); mainWindow.webContents.openDevTools(); } else { // Production: load from built files // In packaged app, files are in resources/out or app.asar const outPath = path.join(__dirname, '..', 'out', 'index.html'); const appPath = path.join(__dirname, 'out', 'index.html'); const filePath = require('fs').existsSync(outPath) ? outPath : appPath; mainWindow.loadFile(filePath); } mainWindow.on('closed', () => { mainWindow = null; }); // Handle external links mainWindow.webContents.setWindowOpenHandler(({ url }) => { require('electron').shell.openExternal(url); return { action: 'deny' }; }); } app.whenReady().then(() => { createWindow(); app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } }); }); app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } }); // Handle app info requests ipcMain.handle('get-app-info', () => { return { name: app.getName(), version: app.getVersion(), isElectron: true, }; });