!macro quitFarmControl
  DetailPrint "Stopping running Farm Control processes..."
  ExecWait 'taskkill /F /IM launcher.exe /T' $R0
!macroend

!macro uninstallPreviousFarmControl
  ClearErrors
  ReadRegStr $R0 HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\Farm Control" "UninstallString"
  StrCmp $R0 "" check_install_dir run_uninstall

  check_install_dir:
    ReadRegStr $R0 HKCU "Software\Tom Butcher\Farm Control" "InstallDir"
    StrCmp $R0 "" check_legacy_uninstall
    StrCpy $R0 "$R0\Uninstall.exe"
    Goto run_uninstall

  check_legacy_uninstall:
    ReadRegStr $R0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Farm Control" "UninstallString"
    StrCmp $R0 "" check_legacy_install_dir run_uninstall

  check_legacy_install_dir:
    ReadRegStr $R0 HKLM "Software\Tom Butcher\Farm Control" "InstallDir"
    StrCmp $R0 "" check_default_dir
    StrCpy $R0 "$R0\Uninstall.exe"
    Goto run_uninstall

  check_default_dir:
    StrCpy $R0 "$LOCALAPPDATA\Programs\Farm Control\Uninstall.exe"
    IfFileExists $R0 run_uninstall check_legacy_default_dir

  check_legacy_default_dir:
    StrCpy $R0 "$PROGRAMFILES64\Farm Control\Uninstall.exe"
    IfFileExists $R0 run_uninstall done_uninstall

  run_uninstall:
    IfFileExists $R0 0 done_uninstall
    DetailPrint "Removing previous Farm Control installation..."
    !insertmacro quitFarmControl
    ExecWait '$R0 /S' $R1
    DetailPrint "Previous installation removed (exit code: $R1)"

  done_uninstall:
!macroend

!macro fixShortcutWorkingDir SHORTCUT_PATH WORKING_DIR
  Push $0
  Push $1
  Push $2
  StrCpy $1 "${SHORTCUT_PATH}"
  StrCpy $2 "${WORKING_DIR}"
  InitPluginsDir
  FileOpen $0 "$PLUGINSDIR\fix-shortcut.ps1" w
  FileWrite $0 '$$s = (New-Object -COM WScript.Shell).CreateShortcut("'
  FileWrite $0 $1
  FileWrite $0 '")$\r$\n'
  FileWrite $0 '$$s.WorkingDirectory = "'
  FileWrite $0 $2
  FileWrite $0 '"$\r$\n'
  FileWrite $0 '$$s.Save()$\r$\n'
  FileClose $0
  ExecWait '"$SYSDIR\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -File "$PLUGINSDIR\fix-shortcut.ps1"'
  Delete "$PLUGINSDIR\fix-shortcut.ps1"
  Pop $2
  Pop $1
  Pop $0
!macroend

!macro createDesktopShortcut
  SetShellVarContext current
  CreateShortCut "$DESKTOP\Farm Control.lnk" "$INSTDIR\bin\launcher.exe" "" "$INSTDIR\bin\launcher.exe" 0 SW_SHOWNORMAL "" "Farm Control"
  !insertmacro fixShortcutWorkingDir "$DESKTOP\Farm Control.lnk" "$INSTDIR\bin"
!macroend

!macro createStartMenuShortcut
  SetShellVarContext current
  CreateDirectory "$SMPROGRAMS\Farm Control"
  CreateShortCut "$SMPROGRAMS\Farm Control\Farm Control.lnk" "$INSTDIR\bin\launcher.exe" "" "$INSTDIR\bin\launcher.exe" 0 SW_SHOWNORMAL "" "Farm Control"
  !insertmacro fixShortcutWorkingDir "$SMPROGRAMS\Farm Control\Farm Control.lnk" "$INSTDIR\bin"
!macroend

!macro removeDesktopShortcut
  SetShellVarContext current
  Delete "$DESKTOP\Farm Control.lnk"
!macroend

!macro removeStartMenuShortcut
  SetShellVarContext current
  Delete "$SMPROGRAMS\Farm Control\Farm Control.lnk"
  RMDir "$SMPROGRAMS\Farm Control"
!macroend

!macro customInstall
  DetailPrint "Register farmcontrol URI Handler"
  DeleteRegKey HKCU "Software\Classes\farmcontrol"
  WriteRegStr HKCU "Software\Classes\farmcontrol" "" "URL:farmcontrol"
  WriteRegStr HKCU "Software\Classes\farmcontrol" "URL Protocol" ""
  WriteRegStr HKCU "Software\Classes\farmcontrol\DefaultIcon" "" "$INSTDIR\bin\launcher.exe"
  WriteRegStr HKCU "Software\Classes\farmcontrol\shell" "" ""
  WriteRegStr HKCU "Software\Classes\farmcontrol\shell\Open" "" ""
  WriteRegStr HKCU "Software\Classes\farmcontrol\shell\Open\command" "" '"$INSTDIR\bin\bun.exe" "$INSTDIR\bin\deeplink.js" "%1"'

  DetailPrint "Creating shortcuts"
  !insertmacro createDesktopShortcut
  !insertmacro createStartMenuShortcut
!macroend

!macro customUnInstall
  !insertmacro removeDesktopShortcut
  !insertmacro removeStartMenuShortcut
  DeleteRegKey HKCU "Software\Classes\farmcontrol"
!macroend
