from std/osproc import execProcess
from std/strformat import fmt
import sharedModule, std/os

proc enableGlobalMenus(): int =
  try:
    moveFile("/usr/lib/vala-panel/appmenu-registrar.disabled", "/usr/lib/vala-panel/appmenu-registrar")
    removeFile("/usr/share/libalpm/hooks/disable-global-menu.hook")
  except:
    return 1

proc disableGlobalMenus(): int =
  try:
    moveFile("/usr/lib/vala-panel/appmenu-registrar", "/usr/lib/vala-panel/appmenu-registrar.disabled")
    if not fileExists("/usr/share/libalpm/hooks/disable-global-menu.hook"):
      createDir("/usr/share/libalpm/hooks")
      copyFileWithPermissions("/usr/share/tromjaro-layout-switcher/disable-global-menu.hook",
        "/usr/share/libalpm/hooks/disable-global-menu.hook")
    discard runCommand("/usr/bin/killall", ["appmenu-registrar"])
  except:
    return 1

proc showHelp() =
  let executableName = paramStr(0).extractFilename()
  echo fmt"""
Usage: {executableName} <option>
Options:
    enable      enable global menus
    disable     disable global menus"""

if execProcess("/usr/bin/id", args=["--user"], options={}) != "0\n":
  echo "Run this program as root."
  quit(1)

var exitCode: int
if paramCount() < 1:
  if isGlobalMenuEnabled():
    exitCode = disableGlobalMenus()
  else:
    exitCode = enableGlobalMenus()
else:
  case paramStr(1)
  of "enable":
    if isGlobalMenuEnabled():
      echo "Global menus are already enabled."
      exitCode = 0
    else:
      exitCode = enableGlobalMenus()
  of "disable":
    if not isGlobalMenuEnabled():
      echo "Global menus are already disabled."
      exitCode = 0
    else:
      exitCode = disableGlobalMenus()
  else:
    showHelp()

quit(exitCode)