const { app, BrowserWindow, dialog } = require('electron/main');

function createWindow() {
  const mainWindow = new BrowserWindow({
    width: 1280,
    height: 760,
    autoHideMenuBar: true
  });

  mainWindow.webContents.session.on('select-serial-port', async (event, portList, webContents, callback) => {
    // Add listeners to handle ports being added or removed before the callback for `select-serial-port` is called.
    mainWindow.webContents.session.on('serial-port-added', (event, port) => {
      console.log('serial-port-added FIRED WITH', port);
      // Optionally update portList to add the new port
    });

    mainWindow.webContents.session.on('serial-port-removed', (event, port) => {
      console.log('serial-port-removed FIRED WITH', port);
      // Optionally update portList to remove the port
    });

    event.preventDefault();

    if (portList && portList.length > 0) {
      // Only keep the last 5 ports
      const lastFivePorts = portList.slice(-5);

      // Prepare options for dialog box
      const options = {
        type: 'question',
        buttons: lastFivePorts.map(port => port.portName), // Display port names as choices
        title: 'Select Serial Port',
        message: 'Please select a serial port to use:'
      };

      const result = await dialog.showMessageBox(mainWindow, options);
      if (result.response >= 0) {
        callback(lastFivePorts[result.response].portId); // Callback with the selected port ID
      } else {
        callback(''); // No port selected
      }
    } else {
      callback(''); // No ports available
    }
  });

  mainWindow.webContents.session.setPermissionCheckHandler((webContents, permission, requestingOrigin, details) => {
    if (permission === 'serial' && details.securityOrigin === 'file:///') {
      return true;
    }

    return false;
  });

  mainWindow.webContents.session.setDevicePermissionHandler((details) => {
    if (details.deviceType === 'serial' && details.origin === 'file://') {
      return true;
    }

    return false;
  });

  mainWindow.loadFile('./dist/index.html');

  // mainWindow.webContents.openDevTools();
}

app.whenReady().then(() => {
  createWindow();

  app.on('activate', function () {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit();
});