import { app, BrowserWindow } from "electron";
import { createWindow, mainWindow } from "../win/mainWin";
import { initIpcMain } from "./ipcMain";
import { initTray } from "./tray";
import { initExpress } from "./express";

//平台
// const isMac = process.platform === "darwin";
//跨域警告关闭
(process.env["ELECTRON_DISABLE_SECURITY_WARNINGS"] as unknown) = true;
//环境
// const isDev = process.env.IS_DEV == "true" ? true : false;

if (!app.requestSingleInstanceLock()) {
  app.quit();
  process.exit(0);
} else {
  app.on("second-instance", (event, commandLine, workingDirectory) => {
    if (mainWindow) {
      if (mainWindow.isMinimized()) mainWindow.restore();
      mainWindow.show();
      mainWindow.focus();
    }
  });
}

// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
  AtLogin();
  createWindow();
  initTray();
  initExpress();
});
// 开机自启动
const AtLogin = async () => {
  if (app.isPackaged) {
    // 设置应用开机启动
    app.setLoginItemSettings({
      openAtLogin: true, // 设置为 true 可以隐藏启动时的窗口
      path: app.getPath("exe"), // 可选,指定要启动的应用路径
      args: ["--openAsHidden"],
    });
  }
};

// SqliteData.getInstance();
app.on("activate", function () {
  // 通常在 macOS 上,当点击 dock 中的应用程序图标时,如果没有其他
  // 打开的窗口,那么程序会重新创建一个窗口。
  // if (BrowserWindow.getAllWindows().length === 0) createWindow();
  console.log("activate=====>");
  const allWindows = BrowserWindow.getAllWindows();
  if (!allWindows.length) {
    createWindow();
  }
});

// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 因此,通常对程序和它们在
// 任务栏上的图标来说,应当保持活跃状态,直到用户使用 Cmd + Q 退出。
app.on("window-all-closed", function () {
  // SqliteData.getInstance().close();
  if (process.platform !== "darwin") app.quit();
});

// 在这个文件中,你可以包含应用程序剩余的所有部分的代码,
// 也可以拆分成几个文件,然后用 require 导入。

initIpcMain();