#!/bin/sh
set -e

BUILD_VERSION={version}
UPDATER={updater}

. /usr/share/debconf/confmodule
db_get sonarr/owning_user
USER="$RET"
db_get sonarr/owning_group
GROUP="$RET"
db_get sonarr/config_directory
CONFDIR="$RET"

# Add User and Group
if ! getent group "$GROUP" >/dev/null; then
  groupadd "$GROUP"
fi
if ! getent passwd "$USER" >/dev/null; then
  adduser --system --no-create-home --ingroup "$GROUP" "$USER"
fi

if [ $1 = "configure" ]; then
  # Migrate old Sonarr v3 alpha data dir from /var/opt/sonarr or user home
  if [ -d "/var/opt/sonarr" ] && [ "$CONFDIR" != "/var/opt/sonarr" ] && [ ! -d "$CONFDIR" ]; then
    varoptRoot="/var/opt/sonarr"
    varoptAppData="$varoptRoot/.config/Sonarr"
    sonarrUserHome=`getent passwd $USER | cut -d ':' -f 6`
    sonarrAppData="$sonarrUserHome/.config/Sonarr"
    if [ -f "$varoptRoot/sonarr.db" ]; then
      # Handle /var/opt/sonarr/sonarr.db
      mv "$varoptRoot" "$CONFDIR"
    elif [ -f "$varoptAppData/sonarr.db" ]; then
      # Handle /var/opt/sonarr/.config/Sonarr/sonarr.db
      mv "$varoptAppData" "$CONFDIR"
      rm -rf "$varoptRoot"
    elif [ -f "$sonarrAppData/sonarr.db" ]; then
      # Handle ~/.config/Sonarr/sonarr.db
      mv "$sonarrAppData" "$CONFDIR"
      rm -rf "$sonarrAppData"
    else
      mv "$varoptRoot" "$CONFDIR"
    fi
    chown -R $USER:$GROUP "$CONFDIR"
    chmod -R 775 "$CONFDIR"
  fi

  # Migrate old NzbDrone data dir
  if [ -d "/usr/lib/sonarr/nzbdrone-appdata" ] && [ ! -d "$CONFDIR" ]; then
    NZBDRONE_DATA=`readlink /usr/lib/sonarr/nzbdrone-appdata`
    if [ -f "$NZBDRONE_DATA/config.xml" ] && [ -f "$NZBDRONE_DATA/nzbdrone.db" ]; then
      echo "Found NzbDrone database in $NZBDRONE_DATA, copying to $CONFDIR."
      mkdir -p "$CONFDIR"
      cp $NZBDRONE_DATA/config.xml $NZBDRONE_DATA/nzbdrone.db* "$CONFDIR/"
      chown -R $USER:$GROUP "$CONFDIR"
      chmod -R 775 "$CONFDIR"
    else
      echo "Missing NzbDrone database in $NZBDRONE_DATA, skipping migration."
    fi
    rm /usr/lib/sonarr/nzbdrone-appdata
  fi
fi

# Create data directory
if [ ! -d "$CONFDIR" ]; then
  mkdir -p "$CONFDIR"
  chown -R $USER:$GROUP "$CONFDIR"
fi

#BEGIN BUILTIN UPDATER
# Apply patch if present
if [ "$UPDATER" = "BuiltIn" ] && [ -f /usr/lib/sonarr/bin_patch/release_info ]; then
  # It shouldn't be possible to get a wrong bin_patch, but let's check anyway and throw it away if it's wrong
  currentVersion=`cat /usr/lib/sonarr/bin_patch/release_info | grep 'ReleaseVersion=' | cut -d= -f 2`
  currentRelease=`echo "$currentVersion" | cut -d. -f1,2,3`
  currentBuild=`echo "$currentVersion" | cut -d. -f4`
  targetVersion=$BUILD_VERSION
  targetRelease=`echo "$targetVersion" | cut -d. -f1,2,3`
  targetBuild=`echo "$targetVersion" | cut -d. -f4`

  if [ "$currentRelease" = "$targetRelease" ] && [ "$currentBuild" -gt "$targetBuild" ]; then
    echo "Applying $currentVersion from BuiltIn updater instead of downgrading to $targetVersion"
    rm -rf /usr/lib/sonarr/bin
    mv /usr/lib/sonarr/bin_patch /usr/lib/sonarr/bin
  else
    rm -rf /usr/lib/sonarr/bin_patch
  fi
fi
#END BUILTIN UPDATER

# Set permissions on /usr/lib/sonarr
chown -R $USER:$GROUP /usr/lib/sonarr

# Update sonarr.service file
sed -i "s:User=sonarr:User=$USER:g; s:Group=sonarr:Group=$GROUP:g; s:-data=/var/lib/sonarr:-data=$CONFDIR:g" /lib/systemd/system/sonarr.service

#BEGIN BUILTIN UPDATER
if [ $1 = "upgrade" ] && [ "$UPDATER" = "BuiltIn" ]; then
  # If we upgraded, signal Sonarr to do an update check on startup instead of scheduled.
  touch $CONFDIR/update_required
  chown $USER:$GROUP $CONFDIR/update_required
fi
#END BUILTIN UPDATER

#DEBHELPER#

exit 0