#!/usr/bin/with-contenv bash

# If docker manages versioning exit
if [ "${VERSION}" ] && [ "${VERSION}" == 'docker' ]; then
	echo "Docker is used for verisoning skip update check"
	exit 0
fi

# test if plex is installed and try re-pulling latest if not
if (dpkg --get-selections plexmediaserver | grep -wq "install"); then
:
else
echo "for some reason plex doesn't appear to be installed, pulling a new copy and exiting out of update script"
curl -o /tmp/plexmediaserver.deb -L \
       	"${PLEX_DOWNLOAD}/${REMOTE_VERSION}/debian/plexmediaserver_${REMOTE_VERSION}_${PLEX_ARCH}.deb" && \
dpkg -i --force-confold /tmp/plexmediaserver.deb
rm -f /tmp/plexmediaserver.deb
exit 0
fi

# set no update message
[[ -e /tmp/no-version.nfo ]] && \
       	rm /tmp/no-version.nfo
NOVERSION_SET='/tmp/no-version.nfo'
cat > "${NOVERSION_SET}" <<-EOFVERSION
#######################################################
# Update routine will not run because you havent set  #
# the VERSION variable or you opted out of updates.   #
#          For more information checkout :-           #
#    https://github.com/linuxserver/docker-plex       #
#######################################################
EOFVERSION

# set update failed message
[[ -e /tmp/update_fail.nfo ]] && \
       	rm /tmp/update_fail.nfo
UPGRADE_FAIL='/tmp/update_fail.nfo'
cat > "${UPGRADE_FAIL}" <<-EOFFAIL
########################################################
# Upgrade attempt failed, this could be because either #
# plex update site is down, local network issues, or   #
# you were trying to get a version that simply doesn't #
# exist, check over the VERSION variable thoroughly &  #
# correct it or try again later.                       #
########################################################
EOFFAIL

# test for no version set or opt out for autoupdates
if [[ -z "$VERSION" ]] || [[ "$VERSION" == "0" ]] || [[ -n "$ADVANCED_DISABLEUPDATES" ]]; then
printf '\n\n\n%s\n\n\n' "$(</tmp/no-version.nfo)"
exit 0
fi

# set header for no preferences/token message
[[ -e /tmp/no-token.nfo ]] && \
       	rm /tmp/no-token.nfo
NOTOKEN_SET='/tmp/no-token.nfo'
cat > "${NOTOKEN_SET}" <<-EOFTOKEN
#####################################################
#   Login via the webui at http://<ip>:32400/web    #
#   and restart the docker, because there was no    #
EOFTOKEN

# if preferences files doesn't exist, exit out
if [ ! -e "/config/Library/Application Support/Plex Media Server/Preferences.xml" ]; then
cat >> "${NOTOKEN_SET}" <<-EOFTOKEN
#   preference file found, possibly first startup.  #
#####################################################
EOFTOKEN
printf '\n\n\n%s\n\n\n' "$(</tmp/no-token.nfo)"
exit 0
fi

# attempt to read plex token
PLEX_TOKEN=$( sed -n 's/.*PlexOnlineToken="//p' \
       	"/config/Library/Application Support/Plex Media Server/Preferences.xml" \
       	| sed "s/\".*//")

# if plex token isn't found, exit out
if [ -z "$PLEX_TOKEN" ]; then
cat >> "${NOTOKEN_SET}" <<-EOFTOKEN
#      plex token found in the preference file      #
#####################################################
EOFTOKEN
printf '\n\n\n%s\n\n\n' "$(</tmp/no-token.nfo)"
exit 0
fi

# determine installed version of plex
INSTALLED_VERSION=$(dpkg-query -W -f='${Version}' plexmediaserver)

# start update routine
if [[ "${VERSION,,}" = latest ]] || [[ "${VERSION,,}" = plexpass ]] || [[ "$PLEXPASS" == "1" ]]; then
  if [[ "${PLEX_ARCH}" = amd64 ]]; then
    PLEX_URL_ARCH="x86_64"
  elif [[ "${PLEX_ARCH}" = armhf ]]; then
    PLEX_URL_ARCH="armv7hf_neon"
  elif [[ "${PLEX_ARCH}" = arm64 ]]; then
    PLEX_URL_ARCH="aarch64"
  fi
REMOTE_VERSION=$(curl -s "https://plex.tv/downloads/details/5?distro=debian&build=linux-${PLEX_URL_ARCH}&channel=8&X-Plex-Token=$PLEX_TOKEN"| grep -oP 'version="\K[^"]+' | tail -n 1 )
elif [[ "${VERSION,,}" = public ]]; then
REMOTE_VERSION=curl -sX GET 'https://plex.tv/api/downloads/5.json' | jq -r 'first(.[] | .Linux.version)'
else
REMOTE_VERSION="${VERSION}"
fi

if [[ "$REMOTE_VERSION" == "$INSTALLED_VERSION" ]]; then
echo "No update required"
exit 0
fi

echo "Atempting to upgrade to: $REMOTE_VERSION"
rm -f /tmp/plexmediaserver_*.deb
wget -nv -P /tmp \
"${PLEX_DOWNLOAD}/${REMOTE_VERSION}/debian/plexmediaserver_${REMOTE_VERSION}_${PLEX_ARCH}.deb"
last=$?

# test if deb file size is ok, or if download failed
if [[ "$last" -gt "0" ]] || [[ $(stat -c %s /tmp/plexmediaserver_"${REMOTE_VERSION}"_${PLEX_ARCH}.deb) -lt 10000 ]]; then
printf '\n\n\n%s\n\n\n' "$(</tmp/update_fail.nfo)"
exit 0
# if ok, try to install it.
else
dpkg -i --force-confold /tmp/plexmediaserver_"${REMOTE_VERSION}"_${PLEX_ARCH}.deb
rm -f /tmp/plexmediaserver_*.deb
fi
