#!/bin/bash

version=2023.2

status "Installing Java 17"
case "$__os_id" in
# Raspbian is not reported as a derivative of Debian (no /etc/upstream-release/lsb-release file)
Raspbian | Debian)
  if printf '%s\n' "10" "$__os_release" | sort -CV; then
    adoptium_installer || exit 1
    install_packages temurin-17-jdk || exit 1
    java_home="$(dpkg -L temurin-17-jdk | grep "/usr/lib/jvm.*$(dpkg --print-architecture)$")"
  else
    error "Debian version ($__os_codename) is too old, update to debian Buster or newer"
  fi
  ;;
Kali)
  adoptium_installer || exit 1
  install_packages temurin-17-jdk || exit 1
  java_home="$(dpkg -L temurin-17-jdk | grep "/usr/lib/jvm.*$(dpkg --print-architecture)$")"
  ;;
Ubuntu)
  # ubuntu default repositories now include openjdk-17
  # install java
  install_packages openjdk-17-jdk || exit 1
  java_home="$(dpkg -L openjdk-17-jdk | grep "/usr/lib/jvm.*$(dpkg --print-architecture)$")"
  ;;
*)
  error "$__os_id appears to be an unsupported OS"
  ;;
esac

# Get dependencies
install_packages build-essential || exit 1

sudo rm -rf /opt/ideaIC /opt/ideaIC.tar.gz
sudo mkdir /opt/ideaIC || error "Failed to make idea_ic folder!"
wget https://download.jetbrains.com/idea/ideaIC-${version}.tar.gz /tmp/ideaIC.tar.gz || error "Failed to download!"

cd /opt/ideaIC
sudo tar xf /tmp/ideaIC.tar.gz --strip-components=1 || error "Failed to extract ideaIC.tar.gz!"
rm -f /tmp/ideaIC.tar.gz

cd $HOME
status "Compiling file watcher ..."
wget https://github.com/Pi-Apps-Coders/files/raw/main/fsnotifier-pycharm-rpi.zip || exit 1
unzip fsnotifier-pycharm-rpi.zip || error "Failed to unzip fsnotifier-pycharm-rpi.zip."
cd $HOME/fsnotifier-pycharm-rpi/
gcc -O2 -Wall -Wextra -Wpedantic -std=c11 -o fsnotifier main.c inotify.c util.c || error "Failed to compile file watcher."
chmod 755 fsnotifier || error "Failed to set file watcher as executable."
mkdir -p "$HOME/.config/JetBrains/IdeaIC$(echo "$version" | sed 's/\.[^.]*//2g')/options"
mv -f "$HOME/fsnotifier-pycharm-rpi/fsnotifier" "$HOME/.config/JetBrains/IdeaIC$(echo "$version" | sed 's/\.[^.]*//2g')/" || error "Failed to move fsnotifier binary to $HOME/.config/JetBrains/IdeaIC$(echo "$version" | sed 's/\.[^.]*//2g')/."
[ -a "$HOME/.config/JetBrains/IdeaIC$(echo "$version" | sed 's/\.[^.]*//2g')/idea.properties" ] && echo "$(cat $HOME/.config/JetBrains/IdeaIC$(echo "$version" | sed 's/\.[^.]*//2g')/idea.properties | grep -v idea.filewatcher.executable.path)" > "$HOME/.config/JetBrains/IdeaIC$(echo "$version" | sed 's/\.[^.]*//2g')/idea.properties"
echo "idea.filewatcher.executable.path = $HOME/.config/JetBrains/IdeaIC$(echo "$version" | sed 's/\.[^.]*//2g')/fsnotifier" >> "$HOME/.config/JetBrains/IdeaIC$(echo "$version" | sed 's/\.[^.]*//2g')/idea.properties" || error "Failed to add file watcher executable path to $HOME/.config/JetBrains/IdeaIC$(echo "$version" | sed 's/\.[^.]*//2g')/idea.properties."

if [ $arch == 32 ] && [ ! -f "$HOME/.config/JetBrains/IdeaIC$(echo "$version" | sed 's/\.[^.]*//2g')/disabled_plugins.txt" ];then
  # disable android plugin as it takes up too much ram on 32bit to start java
  # users can re-enable this and disable other plugins at their choice through the GUI within the application
  echo "org.jetbrains.android" >> "$HOME/.config/JetBrains/IdeaIC$(echo "$version" | sed 's/\.[^.]*//2g')/disabled_plugins.txt"
fi

echo "[Desktop Entry]
Type=Application
Version=${version}
Name=IntelliJ IDEA
Path=/opt/ideaIC/bin
Exec=bash -c "\""JAVA_HOME=$java_home PATH=$java_home/bin/:$PATH /opt/ideaIC/bin/idea.sh"\""
Comment=A fast and lightweight IDE using GTK+
Icon=/opt/ideaIC/bin/idea.png
Categories=Development;IDE;
StartupNotify=true" | sudo tee /usr/share/applications/intellijidea.desktop >/dev/null

#cleanup
rm -rf $HOME/fsnotifier-pycharm-rpi  $HOME/fsnotifier-pycharm-rpi.zip
