# helpers

close_drovio_processes () {
  drovio_updater_pid=$(pgrep drovio-updater 2>&1)
  drovio_core_pid=$(pgrep drovio-core 2>&1)
  drovio_gui_pid=$(pgrep drovio-gui 2>&1)

  if [ "$drovio_updater_pid" != "" ]; then
    # Drovio updater is running, try to exit it normally and wait 10 seconds
    systemctl stop drovio-updater.service
    timeout 10 tail --pid=$drovio_updater_pid -f /dev/null
  fi

  if [ "$drovio_core_pid" != "" ] && [ "$drovio_gui_pid" != "" ]; then
    # Drovio is running, try to exit it normally and wait 10 seconds
    /opt/drovio/drovio-gui --stop
    timeout 10 tail --pid=$drovio_gui_pid -f /dev/null
  fi

  drovio_updater_pid=$(pgrep drovio-updater 2>&1)
  drovio_core_pid=$(pgrep drovio-core 2>&1)
  drovio_gui_pid=$(pgrep drovio-gui 2>&1)

  if [ "$drovio_updater_pid" != "" ] || [ "$drovio_core_pid" != "" ] || [ "$drovio_gui_pid" != "" ]; then
    # Something seems to be blocked, kill both process if any
    if [ "$drovio_updater_pid" != "" ]; then
      kill -9 $drovio_updater_pid
    fi
    if [ "$drovio_core_pid" != "" ]; then
      kill -9 $drovio_core_pid
    fi
    if [ "$drovio_gui_pid" != "" ]; then
      kill -9 $drovio_gui_pid
    fi
  fi
}

install_and_start_updater_service () {
  cp /opt/drovio/drovio-updater.properties.default /opt/drovio/drovio-updater.properties
  cp /opt/drovio/drovio-updater.service /etc/systemd/system/drovio-updater.service
  systemctl daemon-reload
  systemctl enable drovio-updater.service
  systemctl start drovio-updater.service
}

# Only the Wayland package ships the rule file, and udev would otherwise only apply it
# to devices appearing after the install, so re-tag the ones already present
apply_input_uaccess_rule () {
  [ -f /usr/lib/udev/rules.d/72-input-uaccess.rules ] || return 0
  command -v udevadm >/dev/null 2>&1 || return 0
  echo "Applying input device permissions..."
  udevadm control --reload-rules
  udevadm trigger --subsystem-match=input --action=add
  return 0
}

stop_and_remove_updater_service () {
  systemctl stop drovio-updater.service
  systemctl disable drovio-updater.service
  [ -f "/etc/systemd/system/drovio-updater.service" ] && rm -f /etc/systemd/system/drovio-updater.service
  systemctl daemon-reload
}


# pre-install script

pre_install() {
  echo "-> pre_install"
  echo "Closing Drovio processes..."
  close_drovio_processes
}


# pre-upgrade script

pre_upgrade() {
  echo "-> pre_upgrade"
  echo "Closing Drovio processes..."
  close_drovio_processes
  echo "Removing Drovio Updater .properties file..."
  [ -f "/opt/drovio/drovio-updater.properties" ] && rm -f /opt/drovio/drovio-updater.properties
}


# post-install script

post_install() {
  echo "-> post_install"
  echo "Setting up Drovio updater service..."
  install_and_start_updater_service
  apply_input_uaccess_rule
}


# post-upgrade script

post_upgrade() {
  echo "-> post_upgrade"
  echo "Setting up Drovio updater service..."
  install_and_start_updater_service
  apply_input_uaccess_rule
}


# pre-remove script

pre_remove() {
  echo "-> pre_remove"
  echo "Closing Drovio processes..."
  close_drovio_processes
  echo "Removing Drovio Updater .properties file..."
  [ -f "/opt/drovio/drovio-updater.properties" ] && rm -f /opt/drovio/drovio-updater.properties
}


# post-remove script
 
post_remove() {
  echo "-> post_remove"
  echo "Removing Drovio updater service..."
  stop_and_remove_updater_service
}
