const {app, BrowserWindow, dialog, ipcMain} = require('electron')
const path = require('path')
let mainWindow

function createWindow () {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  })

  mainWindow.loadFile('index.html')
}

function showDialog (_, shouldAttachToMainWindow) {
  const abortCtrl = new AbortController()
  setTimeout(() => abortCtrl.abort(), 3_000)

  const parentWindow = shouldAttachToMainWindow ? mainWindow : undefined

  dialog.showMessageBox(
    // On MacOS if parentWindow is undefined this will behave like showMessageBoxSync 
    // and will ignore the abort signal. Windows will dismiss the dialog 
    parentWindow,
    {
      message: 'This should dismiss in 3 seconds',
      signal: abortCtrl.signal
    }
  )
}

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

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

  ipcMain.on('show-dialog', showDialog) 
})

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