#!/usr/bin/env bash
winezgui-open-exe()
{
  HEADER="$(basename ${0}): ${FUNCNAME[0]}"
  dbug "I: $(basename ${0}): Launched ${FUNCNAME[0]}"
  unset EXE_FILE F T
    
  SOURCE "script-check-variables-loaded-or-not"
  script-check-variables-loaded-or-not

  # If no argument is given, ask to select and open exe/msi file
  if [ -z "${1}" ]; then
       dbug "I: ${HEADER}: No arugment given. Select an exe/msi file."
       F="*.exe *.msi"
       T="Select a File"
       EXE_FILE="$(${ZENITY_CMD} --file-filter="${F}" --title="${T}" --file-selection)"
       if [ -z "${EXE_FILE}" ];  then # If no exe is selected
            dbug "I: ${HEADER}: Cancelled!"
            return 1
       fi
       dbug "I: ${HEADER}: Selected file: ${EXE_FILE}"
  else
       export EXE_FILE="${1}"
       dbug "I: ${HEADER}: Received Argument ${EXE_FILE}"
  fi
  
  # If file not found, exit
  if ! [ -f "${EXE_FILE}"  ]; then
       echo "E: ${HEADER}: Cannot find ${EXE_FILE}, exiting!"
       exit 1
  fi
  
  # If file is wzt (prefix backup or game bundle), restore it
  if [ "${IS_EXE}" = "wzt" ]; then
       export WZT_FILE="${EXE_FILE}"
       dbug "I: ${HEADER}: WineZGUI Backup file submitted"
       SOURCE "winezgui-restore-wzt"
       winezgui-restore-wzt
       dbug "I: ${HEADER}: Exiting main program after restoring backup"
       exit 0;
  fi
  
  dbug "I: ${HEADER}: File is ${EXE_FILE}"
 
  # Create required variables using EXE_FILE
  export EXE_FILE=$(realpath -m "${EXE_FILE}")
  export EXE_NAME=$(basename    "${EXE_FILE}")
  export EXE_PATH=$(dirname     "${EXE_FILE}")
  export EXE_NOSP=$(echo "${EXE_NAME}"|tr " " "_")
  export EXE_EXT="${EXE_FILE##*.}"
  export EXE_LESS=$(echo "${EXE_NOSP}"|sed "s/\.[Ee][Xx][Ee]//" \
                                      |sed "s/\.[Mm][Ss][Ii]//")
  export EXE_NOEXE=$(echo "${EXE_NOSP}"           |sed "s/\.[mM][Ss][Ii]//g"\
                                                  |sed "s/\.[eE][Xx][Ee]//g")
  # setup.exe/installer.exe needs to have different directory
# 
echo "============================================ x ========================"
TEST_NAME=$(echo "${EXE_NAME}"| tr [A-Z] [a-z]) # Change case to test
if [[ "${TEST_NAME}" == *"setup"* ]]   2>/dev/null || \
   [[ "${TEST_NAME}" == *"install"* ]] ; then
     dbug "I: Script: Using sha256sum of the exe"
     x=$(sha256sum "${EXE_FILE}")
     EXE_NOEXE=$(echo "${EXE_NOSP}"               |sed "s/\.[mM][Ss][Ii]//g"\
                                                  |sed "s/\.[eE][Xx][Ee]//g")
     SHASUM10CHARS=${x:0:10}
     if [ -n "${USE_SINGLE_PREFIX}" ]; then # If use single prefix is defined
          export WINEPREFIX_SUBDIR="${SINGLE_PREFIX_DIR}"
     else 
          export WINEPREFIX_SUBDIR="${PREFIXES_DIR}/${EXE_NOEXE}-${SHASUM10CHARS}"
     fi
     export SCRIPT_NAME="${EXE_LESS}-${SHASUM10CHARS}.sh"
     echo "WINEPREFIX_SUBDIR=$WINEPREFIX_SUBDIR"
     echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-"
else
     x=$(sha256sum "${EXE_FILE}")
     EXE_NOEXE=$(echo "${EXE_NOSP}"               |sed "s/\.[mM][Ss][Ii]//g"\
                                                  |sed "s/\.[eE][Xx][Ee]//g")
     SHASUM10CHARS=${x:0:10}
     if [ -n "${USE_SINGLE_PREFIX}" ]; then # If use single prefix is defined
          export WINEPREFIX_SUBDIR="${SINGLE_PREFIX_DIR}"
     else 
          export WINEPREFIX_SUBDIR="${PREFIXES_DIR}/${EXE_NOEXE}-${SHASUM10CHARS}"
     fi
     export SCRIPT_NAME="${EXE_LESS}.sh"
     #export WINEPREFIX_SUBDIR="${PREFIXES_DIR}/${EXE_NOEXE}"
     echo "WINEPREFIX_SUBDIR=$WINEPREFIX_SUBDIR"  
fi

  # Create temporary variables for this function
  
  export SCRIPT_FILE_TO_RUN="${WINEPREFIX_SUBDIR}/${SCRIPT_NAME}"
  WINEZGUI_CREATE_PREFIX="${DATADIR}/winezgui-create-prefix"
  dbug "I: ${HEADER}: Checking whether ${SCRIPT_FILE_TO_RUN} exists."
  
  # If existing prefix exists for the exe
  echo "***********************************************"
  echo "testing"
  if [ -f  "${SCRIPT_FILE_TO_RUN}" ]; then
       dbug "I: ${HEADER}: found Script ${SCRIPT_NAME}! Launching..."
       "${SCRIPT_FILE_TO_RUN}" # Run the script file associated with the exe
       dbug "I: ${HEADER}: Re-Launching WineZGUI_Window after ${SCRIPT_NAME}"
  else # Create prefix and script for the exe
       dbug "I: ${HEADER}: Creating Prefix for ${EXE_NAME}"
       ${WINEZGUI_CREATE_PREFIX} "${EXE_FILE}"
       
       # Launch after creating new prefix
       dbug "I: ${HEADER}: Created Script: ${SCRIPT_FILE_TO_RUN}"
       
       if [ -f  "${SCRIPT_FILE_TO_RUN}" ]; then
            dbug "I: ${HEADER}: Launching ${SCRIPT_NAME}"
            "${SCRIPT_FILE_TO_RUN}"
       else
            echo "E: ${HEADER}: ${SCRIPT_NAME} not found!"
       fi
  fi
  unset WINEPREFIX_SUBDIR
  unset SCRIPT_NAME
  unset SCRIPT_FILE_TO_RUN

  return 0
}
