#!/bin/sh

# Path to this script
ScriptDir="$(dirname "$0")"

# Set Prefs
SetPref()
{
  local PrefXml="$PlexPkgHome/Plex Media Server/Preferences.xml"

  sed -i "s;/>; $1=\""$2"\" />;" "$PrefXml"
}

# Message text handler function
# Simple function to keep code clean and pass mneumonic code and arguments to message-text script
MessageText(){
  "$ScriptDir/message-text" "$1" "$2" "$3" "$4"
}

# Where is the shared folder?
PlexPkgShare="/var/packages/PlexMediaServer/shares/PlexMediaServer"
PlexPkgHome="$PlexPkgShare/AppData"

# Must minimally have a tmp directory before
mkdir -p $PlexPkgHome/tmp

# Move anything which needs moving
"$ScriptDir/dsm7-file-moving"
[ $? -ne 0 ] && exit $?

# Remove logfile redirection
rm -f "$PlexPkgHome/PlexMediaServerLogDir"


# Remind user to check permissions only on install.
MessageText M-Install-Complete-Check-Permissions

# Process claim token if supplied
if [ "$WUseClaimToken" = "true" ]; then

  # Token supplied
  if [ "$WClaimToken" = "" ]; then

    # Token login selected but no token provided
    MessageText M-Claim-No-Token-Provided
    exit 1
  fi

  # Remove the current identity if exists
  if [ -e "$PlexPkgHome/Plex Media Server/Preferences.xml" ]; then

    # Get existing ClientID (ProcessedMachineID) for use below
    ClientId="$(cat "$PlexPkgHome/Plex Media Server/Preferences.xml"| \
                tail -1                                                 | \
                sed -e 's/.*ProcessedMachineIdentifier="//'             | \
                sed -e 's/".*//'                                        )"

    # Edit existing preferences so PMS sees us as signed out.
    sed -i 's/PlexOnlineToken="[^"]*"//'    "$PlexPkgHome/Plex Media Server/Preferences.xml"
    sed -i 's/PlexOnlineUsername="[^"]*"//' "$PlexPkgHome/Plex Media Server/Preferences.xml"
    sed -i 's/PlexOnlineMail="[^"]*"//'     "$PlexPkgHome/Plex Media Server/Preferences.xml"
    sed -i 's/PlexOnlineHome="[^"]*"//'     "$PlexPkgHome/Plex Media Server/Preferences.xml"
    sed -i 's/secureConnections="[012]"//'  "$PlexPkgHome/Plex Media Server/Preferences.xml"
    sed -i 's/AcceptedEULA="[01]"//'        "$PlexPkgHome/Plex Media Server/Preferences.xml"
  else

    # Fresh installation, Create Preferences.xml
    mkdir -p "$PlexPkgHome/Plex Media Server"
    echo '<?xml version="1.0" encoding="utf-8"?>' > "$PlexPkgHome/Plex Media Server/Preferences.xml"
    echo '<Preferences/>'                        >> "$PlexPkgHome/Plex Media Server/Preferences.xml"

    # Set MachineID
    # Setup Server's client identifier
    SerialNum="$(uuidgen)"
    SetPref "MachineIdentifier" "$SerialNum"

    ClientId="$(echo -n "${SerialNum}- Plex Media Server" | sha1sum | cut -b 1-40)"
    SetPref "ProcessedMachineIdentifier" "${ClientId}"
  fi

  # Get model for Device field
  Device="$(get_key_value /etc.defaults/synoinfo.conf unique|cut -d'_' -f3|sed 's/^ds/DS/;s/^fs/FS/;s/^rs/RS/'|sed 's/^\([0-9]\)/DS\1/')"

  # DSM version info
  DSMversion="$(get_key_value /etc.defaults/VERSION productversion)"
  DSMbuild="$(get_key_value /etc.defaults/VERSION buildnumber)"
  DSMupdate="$(get_key_value /etc.defaults/VERSION smallfixnumber)"

  LoginInfo="$(curl -X POST \
                    -H "X-Plex-Client-Identifier: ${ClientId}" \
                    -H "X-Plex-Product: Plex Media Server"\
                    -H "X-Plex-Version: 1.1" \
                    -H "X-Plex-Provides: server" \
                    -H "X-Plex-Platform: Linux" \
                    -H "X-Plex-Platform-Version: DSM $DSMversion.$DSMbuild-$DSMupdate" \
                    -H "X-Plex-Device-Name: PlexMediaServer" \
                    -H "X-Plex-Device: ${Device}" \
                    "https://plex.tv/api/claim/exchange?token=${WClaimToken}")"

  # If errors, redo claim sequence
  if [ $? -ne 0 ]; then

    MessageText M-Could-Not-Claim
    exit 1
  fi

  # Extract values
  Username="$(echo "$LoginInfo" | sed -n 's/.*<username>\(.*\)<\/username>.*/\1/p')"
  Email="$(echo "$LoginInfo" | sed -n 's/.*<email>\(.*\)<\/email>.*/\1/p')"
  Token="$(echo "$LoginInfo" | sed -n 's/.*<authentication-token>\(.*\)<\/authentication-token>.*/\1/p')"

  # Write info to Preferences and continue to start
  SetPref PlexOnlineUsername "$Username"
  SetPref PlexOnlineMail "$Email"
  SetPref PlexOnlineToken "$Token"
  SetPref AcceptedEULA    "1"

  # Inform user
  MessageText M-Claim-Successful "$Username"
fi

# Place warning
touch "$PlexPkgShare/Please do not place any media files here."
touch "$PlexPkgShare/Bitte legen Sie hier keine Mediendateien ab."
touch "$PlexPkgShare/Veuillez ne placer aucun fichier multimédia ici."
touch "$PlexPkgShare/Por favor, no coloque ningún archivo multimedia aquí."
touch "$PlexPkgShare/ここにメディアファイルを置かないでください。"
touch "$PlexPkgShare/请不要在此处放置任何媒体文件。"
touch "$PlexPkgHome/Please do not place any media files here."
touch "$PlexPkgHome/Bitte legen Sie hier keine Mediendateien ab."
touch "$PlexPkgHome/Veuillez ne placer aucun fichier multimédia ici."
touch "$PlexPkgHome/Por favor, no coloque ningún archivo multimedia aquí."
touch "$PlexPkgHome/ここにメディアファイルを置かないでください。"
touch "$PlexPkgHome/请不要在此处放置任何媒体文件。"
exit 0
