const { app, BrowserWindow, Tray, Menu } = require('electron')
const path = require('path')

console.log('=== 退出功能测试 ===')

let mainWindow = null
let tray = null

// 单实例检查
const gotTheLock = app.requestSingleInstanceLock()

if (!gotTheLock) {
  console.log('❌ 检测到已有实例运行，退出当前实例')
  app.quit()
} else {
  console.log('✅ 这是第一个实例，继续启动')
  
  // 监听第二个实例
  app.on('second-instance', (event, commandLine, workingDirectory) => {
    console.log('检测到第二个实例启动，激活现有实例')
    if (mainWindow) {
      if (mainWindow.isMinimized()) {
        mainWindow.restore()
      }
      mainWindow.show()
      mainWindow.focus()
    }
  })
  
  // 创建窗口
  function createWindow() {
    mainWindow = new BrowserWindow({
      width: 800,
      height: 600,
      webPreferences: {
        nodeIntegration: true,
        contextIsolation: false
      }
    })
    
    mainWindow.loadURL('data:text/html,<h1>退出功能测试</h1><p>PID: ' + process.pid + '</p><p>时间: ' + new Date().toLocaleString() + '</p><p>点击托盘图标右键菜单中的"退出应用"来测试退出功能</p>')
    
    console.log('窗口已创建，PID:', process.pid)
    
    mainWindow.on('closed', () => {
      mainWindow = null
    })
  }
  
  // 创建托盘
  function createTray() {
    tray = new Tray(path.join(__dirname, 'resources', 'icon.png'))
    
    const contextMenu = Menu.buildFromTemplate([
      {
        label: '显示窗口',
        click: () => {
          if (mainWindow) {
            mainWindow.show()
          }
        }
      },
      {
        label: '隐藏窗口',
        click: () => {
          if (mainWindow) {
            mainWindow.hide()
          }
        }
      },
      { type: 'separator' },
      {
        label: '退出应用',
        click: () => {
          console.log('用户点击退出应用')
          
          // 确保所有窗口都被关闭
          const windows = require('electron').BrowserWindow.getAllWindows()
          console.log(`准备关闭 ${windows.length} 个窗口`)
          
          windows.forEach(window => {
            if (!window.isDestroyed()) {
              try {
                window.destroy()
                console.log('窗口销毁成功')
              } catch (error) {
                console.log('销毁窗口时出错:', error)
              }
            }
          })
          
          // 延迟执行退出，确保窗口销毁完成
          setTimeout(() => {
            try {
              console.log('执行应用退出')
              // 使用 exit 而不是 quit，确保完全退出
              app.exit(0)
            } catch (error) {
              console.log('应用退出失败，尝试强制退出:', error)
              try {
                process.exit(0)
              } catch (processError) {
                console.log('强制退出也失败:', processError)
                // 最后的强制退出
                process.kill(process.pid, 'SIGKILL')
              }
            }
          }, 500)
        }
      }
    ])
    
    tray.setContextMenu(contextMenu)
    tray.setToolTip('退出功能测试')
    
    // 点击托盘图标
    tray.on('click', () => {
      if (mainWindow) {
        if (mainWindow.isVisible()) {
          mainWindow.hide()
        } else {
          mainWindow.show()
        }
      }
    })
  }
  
  app.whenReady().then(() => {
    console.log('应用已准备就绪')
    createWindow()
    createTray()
  })
  
  app.on('window-all-closed', () => {
    console.log('所有窗口已关闭')
    if (process.platform !== 'darwin') {
      app.quit()
    }
  })
  
  app.on('before-quit', () => {
    console.log('应用即将退出')
  })
  
  app.on('will-quit', () => {
    console.log('应用即将退出')
  })
  
  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow()
    }
  })
} 