import type {BrowserWindowConstructorOptions} from 'electron';

import {BrowserWindow, dialog} from 'electron';

import path from 'path';

import {_PATHS} from '../paths';

import {$env, isDev} from '../env';

import {createTray} from './tray';



// 创建窗口

export function createBrowserWindow(options?: BrowserWindowConstructorOptions) {

  const win = new BrowserWindow({

    width: 1200,

    height: 800,

    webPreferences: {

      preload: path.join(_PATHS.preloadRoot, 'index.js'),

      nodeIntegration: false,

      contextIsolation: true,

    },

    // 应用图标

    icon: isDev ? _PATHS.appIcon : void 0,

    ...options,

  });



  // 设置窗口打开处理器

  win.webContents.setWindowOpenHandler(({url}) => {

    const win = createBrowserWindow();

    win.loadURL(url);

    // 阻止创建新窗口,因为已经被接管

    return {action: 'deny'};

  });



  // 当 beforeunload 阻止窗口关闭时触发

  win.webContents.on('will-prevent-unload', () => {

    const choice = dialog.showMessageBoxSync(win, {

      type: 'question',

      title: '确认关闭吗?',

      message: '系统可能不会保存您所做的更改。',

      buttons: ['关闭', '取消'],

      defaultId: 1,

      cancelId: 1,

      noLink: true,

    });

    // 用户选择了关闭,直接销毁窗口

    if (choice === 0) {

      win.destroy();

    }

  });



  return win;

}



// 创建主窗口、系统托盘

export function createMainWindow() {

  const win = createIndexWindow()



  // 设置系统托盘图标

  createTray(win);



  // 主窗口尝试关闭时,默认不直接退出应用,而是隐藏到托盘

  win.on('close', (event) => {

    event.preventDefault();

    win.hide();

  });



  return win;

}



// 创建索引窗口

export function createIndexWindow() {

  const win = createBrowserWindow({

    width: 1600,

    height: 1000,

    title: $env.VITE_GLOB_APP_TITLE!,

  });



  // 开发环境加载Vite服务,生产加载打包文件

  if (isDev) {

    win.loadURL($env.VITE_DEV_SERVER_URL!)

    // 开发环境下,自动打开调试工具

    // win.webContents.openDevTools()

  } else {

    win.loadFile(path.join(_PATHS.publicRoot, 'index.html'));

  }



  return win;

}