#!/usr/bin/env bash
#script-save-load-load
#FIXME: remove identity,
script-save-load-load()
{
  HEADER="$(basename ${0}): ${FUNCNAME[0]}"
  
  SOURCE "script-check-variables-loaded-or-not"
  script-check-variables-loaded-or-not
  dbug "I: $(basename ${0}): Launched ${FUNCNAME[0]}"
  PREFIXNAME=$(basename "${PREFIXDIR}")
  SOURCE "script-save-load-set-saved-game-directory"
  script-save-load-set-saved-game-directory

  HEADER="$(basename ${0}): ${FUNCNAME[0]}"
  dbug "I: $(basename ${0}): Launched ${FUNCNAME[0]}"
  
  # 1.0 If No SavedGame name is given, ask for template to backup
  SELECTED_SAVEDGAME=$(dirname "${SAVED_GAME_PATH}")
 
  
  # 1.1 Need this to print name of template
  SELECTED_SAVEDGAME_NAME=$(basename "${SAVED_GAME_PATH}")

  # Ask user to select the .wzt backup file to restore
  TAR_FILE="$(${ZENITY_CMD} --file-filter="*sav.tar.zst"      \
                     --file-selection                      \
                     --title="Load Saved Game" )"
  TAR_FILE_NAME=$(basename "${TAR_FILE}")
  # If no Backup file is selected, or cancel is clicked
  if [ -z "${TAR_FILE}" ]; then
       dbug "I: Restore: Cancelled!"
       unset TAR_FILE  ; # Empty variable
       return 1
  fi # -z "${TAR_FILE}"
  
  cd "${SELECTED_SAVEDGAME}"

  # 0. Check whether WINEZGUIDIR is writable before restoring
  if [ ! -w "${SELECTED_SAVEDGAME}" ]; then
       dbug "I: ${HEADER}: ${SELECTED_SAVEDGAME} is not writable. Aborting!"
       ${ZENITY_CMD} --error --title "${APP_WITH_VER}" \
              --text "${SELECTED_SAVEDGAME} is not writable"
       return 1
  fi
  
  # Find Local Tar and ZSTD command
  if [ $(which tar) ] && [ $(which zstd) ]; then
       TAR_CMD="$(which tar)"
  fi

  TAR_PREFIX=$(${TAR_CMD} -tf "${TAR_FILE}"|head -n2|grep "/"|cut -f1 -d "/")
  dbug "I: ${HEADER}: Prefix from ${TAR_FILE} is ${TAR_PREFIX}"

  (${TAR_CMD} -xvf "${TAR_FILE}" -C "${SELECTED_SAVEDGAME}" --transform \
          "s|XOUSERXO|${USER}|g" &)|                        \
  (${ZENITY_CMD} --progress --width=500                            \
         --title="Restoring ${TAR_FILE_NAME}!"              \
         --text="Extracting ${TAR_FILE}..."                 \
         --pulsate --auto-close)

  ZENITY_STATUS=$?

  # 4.2.1 If user cancels extraction,  zenity will return 1
  if [ "${ZENITY_STATUS}" = "1" ]; then
       # If the user cancels extraction of wzt game bundle during extraction
       # kill the running tar command which has wzt in it
       unset PID_OF_TAR
       PID_OF_TAR=$(ps -aux|grep -i tar|sed "/.*grep -i.*/d" \
                           |sed "s/  */ /g" |cut -f2 -d " "  )

       if ! [ -z "$PID_OF_TAR" ]; then
            kill -9 ${PID_OF_TAR} \
            && dbug "I: ${HEADER}: Cancelled! Stopped extraction!"
            # Ask the user whether to delete partially extracted or let it be
            ${ZENITY_CMD} --question --title "Extraction Cancelled!" \
                   --text "Delete ${TAR_PREFIX} prefix?"
            ANSWER=$?
            if [ "${ANSWER}" = "0" ]; then
                 # User selected Delete
                 rm -rf "${SELECTED_SAVEDGAME}/${TAR_PREFIX}" && \
                 dbug "I: ${HEADER}: Removed ${SELECTED_SAVEDGAME}/${TAR_PREFIX}"
                 # Cleanup broken links in winezgui shortcuts directory
                 find ${APPLICATIONSDIR} -maxdepth 1 -iname "${SHORTCUT_PREFIX}*" -xtype l -delete 2>/dev/null && \
                 dbug "I: ${HEADER}: Removed broken WineZGUI .desktop links"
            else
                 # user wants to keep prefix
                 dbug "I: ${HEADER}: Keeping extracted ${WINEZGUIDIR}/${TAR_PREFIX}"
                 # Restore Sucess Message
            fi
            MSG=("${TAR_PREFIX} Restore Cancelled!")
            WineZGUI_Window
       fi # if ! [ -z "$PID_OF_TAR" ]; then
  else
       # PROCESS XO--XO variable inside prefixes and templates directory
       SOURCE "winezgui-identity-restore"
       winezgui-identity-restore "${SELECTED_SAVEDGAME}"

       # Inform on successful extraction
       dbug "I: ${HEADER}: Extracted ${TAR_FILE} Successfully!"
       ${ZENITY_CMD} --info --title="${APP_WITH_VER} - Load Saved Game!" \
       --text="Extracted ${TAR_FILE} Successfully!" 
  
  fi # [ "${ZENITY_STATUS}" = "1" ]; then
}
