const { Menu, app } = require("electron");
const { showSettingsWindow } = require("./settings");
const isMac = process.platform === "darwin";
const { name } = require("./../constants/values");

const settingsMenuEntry = {
  label: "Settings",
  click() {
    showSettingsWindow();
  },
  accelerator: "Control+/",
};

const quitMenuEntry = {
  label: "Quit",
  click() {
    app.exit(0);
  },
  accelerator: "Control+Q",
};

const menuModule = {};

menuModule.getMenu = function (mainWindow) {
  const toggleWindow = {
    label: "Toggle Window",
    click: function () {
      mainWindow.isVisible() ? mainWindow.hide() : mainWindow.show();
    },
  };

  const mainMenu = [
    ...(isMac
      ? [
          {
            label: name,
            submenu: [
              { role: "about" },
              settingsMenuEntry,
              { type: "separator" },
              { role: "services" },
              { type: "separator" },
              { role: "hide" },
              { role: "hideothers" },
              { role: "unhide" },
              { type: "separator" },
              quitMenuEntry,
            ],
          },
        ]
      : []),
    {
      label: "File",
      submenu: [settingsMenuEntry, isMac ? { role: "close" } : quitMenuEntry],
    },
    {
      label: "Edit",
      submenu: [
        { role: "undo" },
        { role: "redo" },
        { type: "separator" },
        { role: "cut" },
        { role: "copy" },
        { role: "paste" },
        ...(isMac
          ? [
              { role: "pasteAndMatchStyle" },
              { role: "delete" },
              { role: "selectAll" },
              { type: "separator" },
              {
                label: "Speech",
                submenu: [{ role: "startspeaking" }, { role: "stopspeaking" }],
              },
            ]
          : [{ role: "delete" }, { type: "separator" }, { role: "selectAll" }]),
        { type: "separator" },
        settingsMenuEntry,
      ],
    },
    {
      label: "View",
      submenu: [
        { role: "reload" },
        { role: "forcereload" },
        { type: "separator" },
        { role: "resetzoom" },
        { role: "zoomin" },
        { role: "zoomout" },
        { type: "separator" },
        { role: "togglefullscreen" },
        { role: "toggledevtools" },
      ],
    },
    {
      label: "Window",
      submenu: [
        { role: "minimize" },
        toggleWindow,
        ...(isMac
          ? [{ type: "separator" }, { role: "front" }, { type: "separator" }, { role: "window" }]
          : [{ role: "close" }]),
      ],
    },
    settingsMenuEntry,
    {
      label: "About",
      click() {
        showSettingsWindow("about");
      },
    },
    toggleWindow,
  ];

  return Menu.buildFromTemplate(mainMenu);
};

menuModule.addMenu = function (mainWindow) {
  Menu.setApplicationMenu(menuModule.getMenu(mainWindow));
};

module.exports = menuModule;
