// main.js
require('dotenv').config();
const { app: electronApp, BrowserWindow, shell } = require('electron');
const path = require('path');

// Importamos el Express app (exportado sin listen automático)
const expressApp = require(path.join(__dirname, 'index.js'));

const PORT = process.env.PORT || 3000;
let serverInstance;

// Crea una nueva ventana sin ningún guard (puedes abrir tantas como quieras)
function createWindow() {
  const win = new BrowserWindow({
    width: 1200,
    height: 800,
    icon: path.join(__dirname, 'icon.ico'),
    webPreferences: {
      contextIsolation: true,
      nodeIntegration: false,
      nativeWindowOpen: true
    }
  });

  win.loadURL(`http://localhost:${PORT}`);

  win.webContents.setWindowOpenHandler(({ url }) => {
    if (!url.startsWith(`http://localhost:${PORT}`)) {
      shell.openExternal(url);
      return { action: 'deny' };
    }
    return { action: 'allow' };
  });

  win.webContents.on('will-navigate', (e, url) => {
    if (!url.startsWith(`http://localhost:${PORT}`)) {
      e.preventDefault();
      shell.openExternal(url);
    }
  });
}

// Arranca el servidor solo UNA vez, y abre la primera ventana
function startServer() {
  if (!serverInstance) {
    serverInstance = expressApp.listen(PORT, () => {
      console.log(`Servidor listo en http://localhost:${PORT}`);
      createWindow(); // primera ventana
    });
  }
}

// Impide que se lancen DOS procesos distintos
const gotLock = electronApp.requestSingleInstanceLock();
if (!gotLock) {
  // Si alguien intenta abrir otra copia, esta se cierra
  electronApp.quit();
} else {
  electronApp.on('second-instance', () => {
    // En lugar de enfocar, abrimos una ventana nueva
    createWindow();
  });

  electronApp.whenReady().then(() => {
    startServer();
  });

  electronApp.on('window-all-closed', () => {
    if (serverInstance) serverInstance.close();
    if (process.platform !== 'darwin') {
      electronApp.quit();
    }
  });
}
