#!/usr/bin/env bash
##### Rename Prefix Directory ####
# script-change-prefix
# Steps:
# 1. Ask for New Prefix Name
# 2. replace " " with "_" (underscore)
# 3. If a prefix with given name already exist, inform
# 4. Create Variables for replacement
# 5. Replace PREFIX values inside files
# 6. Rename files as per new prefix name
# 7. Create new shortcut and delete old one
# 8. Launch Script from Renamed Directory
script-change-prefix()
{ 
  dbug "I: Script: Launched ${FUNCNAME[0]}"
  
  SOURCE "script-check-variables-loaded-or-not"
  script-check-variables-loaded-or-not
  export PREFIXES_DIR="${WINEZGUIDIR}/Prefixes"
export SINGLE_PREFIX_DIR="${PREFIXES_DIR}/WineZGUI-Single-Prefix"
  # If No argument is given ask
  if [ -z "${1}" ]; then
      # 1. Ask for New Prefix Name if not provided by argument
      GET_PREFIX_NAME=$(${ZENITY_CMD} --title "Rename Prefix..."             \
                               --width=500 --entry                    \
                               --text "Enter a name for the prefix"   \
                               --entry-text "${PREFIXNAME}"           )
  else
      GET_PREFIX_NAME="${1}"
  fi

  # 1.1 If User clicks cancel, go back
  if [ -z "${GET_PREFIX_NAME}" ]; then
      dbug "I: Script: ${FUNCNAME[0]}: Cancelled"
      Script_Window
  fi

  # Check if user entered symbols
  SOURCE "winezgui-check-entry-text"
  winezgui-check-entry-text "${GET_PREFIX_NAME}"
  
  ENTRY_CHECK=$?
  if [ ${ENTRY_CHECK} -eq 1 ]; then
       dbug "I: Script: ${FUNCNAME[0]}: Symbols used in filename, cancelling!"
       return 1
  fi
  

  # 2. replace " " with "_" (underscore)
  NEWPREFIXNAME=$(echo ${GET_PREFIX_NAME}|tr " " "_")


  # 3. If a prefix with given name already exist, inform
  if [ -d "${PREFIXES_DIR}/${NEWPREFIXNAME}" ]; then
      ${ZENITY_CMD} --error --title="Directory Already Exists!" \
              --text="Cannot change ${PREFIXNAME} to ${NEWPREFIXNAME}"

      dbug "I: Script: ${FUNCNAME[0]}: Cannot change to ${NEWPREFIXNAME}"
      dbug "I: Script: ${FUNCNAME[0]}: ${PREFIXNAME} Already Exists!"
      echo "W: -----------------------------"
      echo "W: setting prefixname in desktop file"
      echo "W: Application (PREFIXNAME)"
      sed "s|${APP_WITH_VER}|${PREFIXNAME}|g" -i "*.desktop"
      return 1
  fi

  # 4. Create Variables for replacement
  NEWPREFIXDIR="${PREFIXES_DIR}/${NEWPREFIXNAME}"
  NEWSCRIPTFILE="$(basename ${SCRIPTFILE})"

  echo "NEWPREFIXDIR  = $NEWPREFIXDIR"
  echo "NEWPREFIXNAME = $NEWPREFIXNAME"
  echo "NEWSCRIPTFILE = $NEWSCRIPTFILE"
  # Main Replacement
  # Change Variables inside Script file which has PREFIXNAME
  # 5.4 Change export PREFIXNAME= Variable to new prefix name value

  # 5.4.0 Desktop File
  cd ${PREFIXDIR}

  S_PREFIXDIR="${PREFIXDIR}"
  R_PREFIXDIR="${NEWPREFIXDIR}"

  sed "s|${S_PREFIXDIR}|${R_PREFIXDIR}|g"     -i *.desktop *.sh *.yml
  
  # 5.4.1 Change Values inside Script file
#   S_PREFIXDIR="^export PREFIXDIR=.*"
#   R_PREFIXDIR="export PREFIXDIR=\"${NEWPREFIXDIR}\""
#   sed "s|${S_PREFIXDIR}|${R_PREFIXDIR}|g"     -i "*.sh"

  S_PREFIXNAME="^export PREFIXNAME=.*"
  R_PREFIXNAME="export PREFIXNAME=\"${NEWPREFIXNAME}\""
  sed "s|${S_PREFIXNAME}|${R_PREFIXNAME}|g"   -i *.sh
  
  # For Scripts created using Open Any Other Exe 
  sed "s|^PROGNAME=\(.*\)(.*)|PROGNAME=\1(${NEWPREFIXNAME})|g" -i *other.sh 
  sed "s|^Name=\(.*\)(.*)|Name=\1(${NEWPREFIXNAME})|g" -i *other.desktop
  
  # 5.4.2 Change values inside Info.yml
  sed "s|^Prefix:.*|Prefix:${NEWPREFIXNAME}|g" -i *.yml



   # 6.4 Rename: Prefix Directory
   mv "${PREFIXDIR}" "${PREFIXES_DIR}/${NEWPREFIXNAME}" && \
   echo  "I: Script: Rename: Prefix: Renamed directory ${PREFIXNAME}" \
       "-> ${NEWPREFIXNAME}"

  # If NO_SHORTCUTS= NOTHING/EMPTY then create shortcuts
  echo "xoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxo" 
  if [ -z "${NO_SHORTCUTS}" ]; then
       # 7. Create new shortcut and delete old one
      # 7.1 link new .desktop file to DEXSKTOPDIR
      for x in "${NEWPREFIXDIR}"/*.desktop;
      do
          BASENAME="$(basename "${x}")"
          #ln -svf "${NEWPREFIXDIR}"/*.desktop ${DEXSKTOPDIR} && \
          #rm "${APPLICATIONSDIR}/${SHORTCUT_PREFIX}_${BASENAME}" -vf 2>/dev/null
          ln -svf "${x}" "${APPLICATIONSDIR}/${SHORTCUT_PREFIX}_${BASENAME}" && \
      echo   "I: Script: Rename: Prefix: Created shortcut for ${NEWDESKTOPFILE}" \
              "at ${APPLICATIONSDIR}" 2>/dev/null || \
      echo   "E: Script: Rename: Prefix: Create Shortcut Failed!!!"
      done
      dbug "I: Script: Rename: Shortcut is created at ${SHORTCUT_PREFIX}_${BASENAME}"
  else 
       dbug "I: Script: Rename: WARNING: Shortcut NOT CREATED at ${SHORTCUT_PREFIX}_${BASENAME}"
  fi
  # 7.2 Delete all broken links which points to winezgui game prefix
  find ${APPLICATIONSDIR} -maxdepth 1 -iname "${SHORTCUT_PREFIX}*" -xtype l -delete 2>/dev/null && \
  dbug "I: Script: ${FUNCNAME[0]}: Removed broken WineZGUI .desktop links"

  # 7.3 update icon cache and desktop menu
  # Clean up broken shortcuts and update shortcuts menu
  SOURCE "winezgui-remove-broken-links"
  winezgui-remove-broken-links


  # Required for instant change in the GameWindow
  export PREFIXNAME="${NEWPREFIXNAME}"
  export PREFIXDIR="${NEWPREFIXDIR}"
  #export SCRIPTFILE="${NEWSCRIPTFILE}"
  export ICONFILE="${NEWICONFILE}"
  export DESKTOPFILE="${NEWDESKTOPFILE}"
  dbug "I: Script: ${FUNCNAME[0]}: starting script from renamed dir"

  NEW_SCRIPT_FILE="${NEWPREFIXDIR}/$(basename "${SCRIPTFILE}")"

  echo "x - x x - x x - x x -  x x - x x - x x - x  - "
  echo "x - x x - x x - x x -  x x - x x - x x - x  - "
  echo "x - x x - x x - x x -  x x - x x - x x - x  - "
  echo "NEWPREFIXDIR=${NEWPREFIXDIR}"
  echo "SCRIPTFILE=${SCRIPTFILE}"
  echo "NEW_SCRIPT_FILE=${NEW_SCRIPT_FILE}"
  echo "x - x x - x x - x x -  x x - x x - x x - x  - "
  echo "x - x x - x x - x x -  x x - x x - x x - x  - "
  echo "x - x x - x x - x x -  x x - x x - x x - x  - "

  # set x permissions
  chmod +rx "${DESKTOPFILE}" "${SCRIPTFILE}" "${S_SCRIPTFILE}" "${S_DESKTOPFILE}" "${NEW_SCRIPT_FILE}" "${NEWDESKTOPFILE}"

  # 8. Launch Script from Renamed Directory
  "${NEW_SCRIPT_FILE}" &

  unset GET_PREFIX_NAME
  unset NEWPREFIXNAME
  unset NEWPREFIXDIR
  unset NEW_EXE_FILE
  unset NEW_EXE_PATH
  unset NEWSCRIPTFILE
  unset NEWICONFILE
  unset NEWDESKTOPFILE
  exit 0 
}
