#!/usr/bin/env bash
#winezgui-import-wine-create-shortcuts-for-found-exes
# USEFUL: this can be used for creating new scripts for exe files for a prefix
winezgui-import-wine-create-shortcuts-for-found-exes()
{
  dbug "I: Script: Launched ${FUNCNAME[0]}"
  dbug "I: Script: Launched ${FUNCNAME[0]}"
  export TEMPDIR="${WINEZGUIDIR}/tmp"
  
 unset COMMAND
 unset count
 unset SHOW_OPTION
 unset NAMES
 unset FILES
 unset LIST_OF_EXES_FOR_SHORTCUTS
 unset search_list


 count=0
 NAMES=()
 FILES=()
 # Find all exe files in drive_c Exclude windows directory,
 # and common exe files present in Program Files directory
 # Add those files to FILES array and filenames to NAMES array
 SOURCE script-get-installed-exe-files
 script-get-installed-exe-files

 EXE_LIST="${EXE_FILES_FOUND}"
 search_list=$(echo "${EXE_LIST}"|tr "\n" "|")

echo "=================================="
echo "$search_list"
 exe_found=$(echo ${search_list}|grep -i "exe")

 if [ -z "${exe_found}" ] ; then
      #${ZENITY_CMD} --error --title "${FUNCNAME[0]} ${PROGNAME} - no exe installed!" \
      #       --text "Sorry, no exe found in prefix: \"${PREFIXNAME}\""
      return 1
 fi
 # if exe_found has value, then only change exe
 SAVEIFS=${IFS}
 IFS=$(echo -en "\n\b")

 for i in $(echo ${search_list}|tr '|' '\n'|sort)
 do
     RealName=$(basename "$i")
     RealFile=$(realpath -m "$i")

     # If 1st value is empty, enable it
     SHOW_OPTION+="TRUE \"${RealName}\""
     SHOW_OPTION+=" "
     NAMES+=("${RealName}")
     FILES+=("${RealFile}")
     
     # Create Shortcuts and Desktop file and extract icon
     export S_EXE_FILE=$(realpath -m "${RealFile}")
     export S_EXE_NAME=$(basename "${S_EXE_FILE}")
     export S_CHECKSUM=$(sha256sum "${S_EXE_FILE}"|cut -f1 -d " ")
     export S_EXE_PATH=$(dirname  "${S_EXE_FILE}")
     export S_EXE_NOSP=$(echo ${S_EXE_NAME}|tr " " "_");
     export S_EXE_LESS=$(echo ${S_EXE_NOSP}|sed "s/\.[Ee][Xx][Ee]//"|sed "s/\.[Mm][Ss][Ii]//")
     export S_EXE_EXT="${S_EXE_FILE##*.}"
     
     # Files
     export S_INFOFILE="${PREFIXDIR}/${S_EXE_LESS}_Info.yml"
     export S_ICONFILE="${PREFIXDIR}/${S_EXE_LESS}.png"
     export S_SCRIPTFILE="${PREFIXDIR}/${S_EXE_LESS}.sh"
     export S_DESKTOPFILE="${PREFIXDIR}/${S_EXE_LESS}.desktop"


     # Extract Name
     # Automatically set name, read from pe file, if not found use exe name
     S_PRODUCT=$(${EXIFTOOL} "${S_EXE_FILE}"|grep -i "product name"|cut -f2 -d ":" \
                                            |sed "s/^ //")
     # if language is not english inside exe name, or product is "", use exe name
     if [ $(echo ${S_PRODUCT} | grep -aEv [a-zA-Z] ) ] || [ -z "${S_PRODUCT}" ]; then
         unset S_PRODUCT
         unset S_PROGNAME
         # PROGNAME=$(echo "${EXE_NAME} (${APP_WITH_VER})"|sed "s/\.[mM][Ss][Ii]//g"\
 
         S_PROGNAME=$(echo "${S_EXE_NAME}"                |sed "s/\.[mM][Ss][Ii]//g"\
                                                          |sed "s/\.[eE][Xx][Ee]//g");
         dbug "I: ${HEADER}: Name: Product Name not found, using exe name"
     else
         #PROGNAME=$(echo "${PRODUCT} (${APP_WITH_VER})");
         S_PROGNAME=$(echo "${S_PRODUCT}");
         dbug "I: ${HEADER}: Name: Product Name found: \"${S_PRODUCT}\""
     fi
     
     # Extract Icon
     # Extract icon and convert it to several png files of diferent quality,
     # Create a temporary Directory to extract icon from the exe file
     dbug "I: ${HEADER}: Icon: Extraction from ${S_EXE_NAME}"
     mkdir -p ${TEMPDIR} && \
     dbug "I: ${HEADER}: Icon: Created directory ${TEMPDIR}"
     cd ${TEMPDIR}
     
     # wrestool extracts ico file from EXE
     ${WRESTOOL_CMD} -x -t 14 "${S_EXE_FILE}" > "${TEMPDIR}/${S_EXE_LESS}.ico" 2> /dev/null && \
     dbug "I: ${HEADER}: Icon: Wrestool executed"
     
     # Only try to extract Icon when Icon is Found in the EXE
     # icotool extracts all png files from ico files
     # Select and copy the best png image file by sorting using ls -S1.
     ${ICOTOOL_CMD} -x "${TEMPDIR}/${S_EXE_LESS}.ico" 2>/dev/null && \
     dbug "I: ${HEADER}: Icotool: Extracting png files from" "${S_EXE_LESS}.ico" && \
     cp $(ls -S -1 ${TEMPDIR}/${S_EXE_LESS}*.png  | head -n 1) ${S_ICONFILE} && \
     dbug "I: ${HEADER}: Icon: Copied successfully..." && WARN="false"
     
     # If icon could not be copied, warn the user
     if [ "${WARN}" != "false" ]; then
          dbug "I: ${HEADER}: Icon could not be copied..." \
               "use \"Change Icon...\" option"
     fi
     
     # Cleanup tempdir and clear variable
     unset WARN
     
     #remove tmp directory after copying icon png
     rm -rf "${TEMPDIR}" && \
     dbug "I: ${HEADER}: Icon: Cleanup ${TEMPDIR}"

     # Copy the script file and modify values
     cp "${SCRIPTFILE}" "${S_SCRIPTFILE}"
     sed "s|export EXE_FILE=.*|export EXE_FILE=\"${S_EXE_FILE}\"|g" -i "${S_SCRIPTFILE}"
     sed "s|export EXE_NAME=.*|export EXE_NAME=\"${S_EXE_NAME}\"|g" -i "${S_SCRIPTFILE}"
     sed "s|export CHECKSUM=.*|export CHECKSUM=\"${S_CHECKSUM}\"|g" -i "${S_SCRIPTFILE}"
     sed "s|export EXE_PATH=.*|export EXE_PATH=\"${S_EXE_PATH}\"|g" -i "${S_SCRIPTFILE}"
     sed "s|export EXE_NOSP=.*|export EXE_NOSP=\"${S_EXE_NOSP}\"|g" -i "${S_SCRIPTFILE}"
     sed "s|export EXE_LESS=.*|export EXE_LESS=\"${S_EXE_LESS}\"|g" -i "${S_SCRIPTFILE}"
     sed "s|export PROGNAME=.*|export PROGNAME=\"${S_PROGNAME} - ${S_EXE_NAME}\"|g" -i "${S_SCRIPTFILE}"
     sed "s|export EXE_EXT=.*|export EXE_EXT=\"${S_EXE_EXT}\"|g"   -i "${S_SCRIPTFILE}"

     sed "s|export INFOFILE=.*|export INFOFILE=\"${S_INFOFILE}\"|g"          -i "${S_SCRIPTFILE}"
     sed "s|export ICONFILE=.*|export ICONFILE=\"${S_ICONFILE}\"|g"          -i "${S_SCRIPTFILE}"
     sed "s|export SCRIPTFILE=.*|export SCRIPTFILE=\"${S_SCRIPTFILE}\"|g"    -i "${S_SCRIPTFILE}"
     sed "s|export DESKTOPFILE=.*|export DESKTOPFILE=\"${S_DESKTOPFILE}\"|g" -i "${S_SCRIPTFILE}"
     
     cp "${DESKTOPFILE}" "${S_DESKTOPFILE}"
     sed "s|Name=.*|Name=${S_PROGNAME} - ${PREFIXNAME}|g"       -i "${S_DESKTOPFILE}"
     sed "s|${SCRIPTFILE}|${S_SCRIPTFILE}|g"                        -i "${S_DESKTOPFILE}" 
     sed "s|${ICONFILE}|${S_ICONFILE}|g"                            -i "${S_DESKTOPFILE}"
     sed "s|Keywords=.*|Keywords=Game; winezgui; ${S_PROGNAME}|g"   -i "${S_DESKTOPFILE}"

     #ln -sf "${S_DESKTOPFILE}" "${DEXSKTOPDIR}"
     # Now using ~/.local/share/applications directory which gets updated instantly
     #
     
     dbug "linking desktop files"
     XBASE_FILE_NAME=$(basename "${S_DESKTOPFILE}")
     # If NO_SHORTCUTS= NOTHING/EMPTY then create shortcuts
  echo "xoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxo" 
     if [ -z "${NO_SHORTCUTS}" ]; then
          ln -svf "${S_DESKTOPFILE}" "${APPLICATIONSDIR}/${SHORTCUT_PREFIX}_${XBASE_FILE_NAME}"
          dbug "I: ${HEADER}: Shortcut is created at ${APPLICATIONSDIR}/${SHORTCUT_NAME}"
     else 
          dbug "I: ${HEADER}: WARNING: Shortcut NOT CREATED at ${APPLICATIONSDIR}/${SHORTCUT_NAME}"
     fi
     count=$(expr ${count} + 1)
 done
 IFS=${SAVEIFS}


 # Do not prompt with "found new exe files"
 SOURCE script-create-found-new-exe-files-file
 script-create-found-new-exe-files-file
 
 # If only 1 exe is found, then set that as Main Exe for the prefixdir
 count=$(echo ${search_list}|tr '|' '\n'|wc -l)
 echo "========================================== = = = = "
 echo "count = $count"
 # count = 2 means only 1 value, already search_list has \n
 if [ $count -eq 2  ]; then
      echo "Only 1 exe found, setting it as default for the prefix"
      echo "Launching..."
      # Reset PRODUCT_NAME - Exe.exe -> PRODUCT_NAME, for 1 exe only
      sed "s|export PROGNAME=.*|export PROGNAME=\"${S_PROGNAME}\"|g" -i "${S_SCRIPTFILE}"
      sed "s|Name=.*|Name=${S_PROGNAME}|g"       -i "${S_DESKTOPFILE}"
      # set x permissions
      chmod +rx "${DESKTOPFILE}" "${SCRIPTFILE}" "${S_SCRIPTFILE}" "${S_DESKTOPFILE}" "${NEW_SCRIPT_FILE}" "${NEWDESKTOPFILE}" "${NEWSCRIPTFILE}"
      # Launch the single one
      "${S_SCRIPTFILE}" &
      # Delete setup script

      #rm "${DESKTOPFILE}" "${SCRIPTFILE}"

      # Remove empty .desktop shortcuts from applications directory

      exit 0
 fi
 
 # We do not need setup file again, so remove the shortcut to the setup file
 # after a single or multiple exes found
 # Remove desktop file, perhaps user may relaunch setup
 #### ISSUE WITH SETUP FILE VS IMPORT-GAME-DIRECTORY
 # do not remove 

 # We are deleting the script and desktop file if it has setup/install substring in it.
#  TEST_NAME=$(basename "${SCRIPTFILE}"| tr [A-Z] [a-z]) # Change case to test   
#  echo "===> TEST_NAME = $TEST_NAME"
#  if [[ "${TEST_NAME}" == *"setup"* ]]   2>/dev/null || \
#     [[ "${TEST_NAME}" == *"install"* ]] ; then
#     echo "===>"
#     echo "===> Deleted ${SCRIPTFILE}"
#     echo "===>"
#     rm "${DESKTOPFILE}" "${SCRIPTFILE}"
#  fi

 # Remove empty .desktop shortcuts from applications directory
 find ${APPLICATIONSDIR} -maxdepth 1 -iname "${SHORTCUT_PREFIX}*" -xtype l -delete 2>/dev/null
 ${UPDATE_DESKTOP_DATABASE} ${APPLICATIONSDIR}

          # # Replace Script file with multiple open dialog
          # # need variables from this script
          # echo "
          # #!/bin/bash
          # export PATH=\"${PATH}\"
          # export APPNAME=\"${APPNAME}\"
          # export FLATPAK_NAME=\"${FLATPAK_NAME}\"
          # export APPVERSION=\"${APPVERSION}\"
          # export APP_WITH_VER=\"${APPNAME}-${APPVERSION}\"
          # export WINEVER=\"${WINEVER}\"
          # export WINEARCH=\"${WINEARCH}\"
          # export PROGNAME=\"${PROGNAME}\"
          # export INSTALL_TYPE=\"\"${INSTALL_TYPE}\"\"
          # export WINEZGUIDIR=\"${WINEZGUIDIR}\"
          # export PREFIXES_DIR=\"${WINEZGUIDIR}/Prefixes\"
          # export PREFIXNAME=\"${EXE_LESS}\"
          # export EXE_FILE=\"${EXE_FILE}\"
          # export EXE_NAME=\"${EXE_NAME}\"
          # export CHECKSUM=\"${CHECKSUM}\"
          # export EXE_PATH=\"${EXE_PATH}\"
          # export EXE_NOSP=\"${EXE_NOSP}\"
          # export EXE_LESS=\"${EXE_LESS}\"
          # export EXE_EXT=\"${EXE_FILE##*.}\"
          # export PREFIXDIR=\"${PREFIXDIR}\"
          # export WINEPREFIX=\"${PREFIXDIR}\"
          # export APPLICATIONSDIR=\"${APPLICATIONSDIR}\"
          # export WINEZGUI_SCRIPTS=\"${WINEZGUI_SCRIPTS}\"
          # export DATADIR=\"${DATADIR}\"
          # export SETTINGS_FILE=\"${WINEZGUIDIR}/Settings.yml\"
          # #export DEXSKTOPDIR=\"${DEXSKTOPDIR}\"
          # export SHORTCUT_PREFIX=\"${SHORTCUT_PREFIX}\"
          # export UPDATE_DESKTOP_DATABASE=\"${UPDATE_DESKTOP_DATABASE}\"
          # export EXIFTOOL=\"\$(which exiftool)\"
          # # winezgui backup file extension
          # export BKP_EXT=\"${BKP_EXT}\"

          # # Files
          # export INFOFILE=\"${PREFIXDIR}/Info.yml\"
          # export ICONFILE=\"${PREFIXDIR}/${EXE_LESS}.png\"
          # export SCRIPTFILE=\"${PREFIXDIR}/${EXE_LESS}.sh\"
          # export DESKTOPFILE=\"${PREFIXDIR}/${EXE_LESS}.desktop\"


          # # Load file with dbug function
          # if [ -f \"${DATADIR}/winezgui-source\" ]; then
          # source \"\${DATADIR}/winezgui-source\"
          # else
          # source \"\${WINEZGUI_SCRIPTS}/winezgui-source\"
          # fi
          # SOURCE winezgui-dbug

          # # if icon is found grep it
          # if [ -f \"${ICONFILE}\" ]; then
          #      export ICON=\"\$(grep Icon \${DESKTOPFILE}|cut -f2 -d \"=\")\"
          # else
          #      export ICON="null"
          # fi
          # " > "${SCRIPTFILE}"
          # echo "
          # SOURCE script-list-available-launch-shortcuts
          # script-list-available-launch-shortcuts \${PREFIXDIR}
          # \"\${SELECTED_SCRIPT}\" &
          # exit 0
          # " >> "${SCRIPTFILE}"

          # chmod +rx "${SCRIPTFILE}"
          
 # Do no Prompt and launch
 # ${ZENITY_CMD} --info --text="Created shortcuts in the menu for ${EXE_NAME}" --title="Shortcuts Created!" --width=400
 SOURCE script-list-available-launch-shortcuts
 script-list-available-launch-shortcuts ${PREFIXDIR}
 "${SELECTED_SCRIPT}" &
 exit 0
# # Generate Height value
# SOURCE winezgui-get-window-height
# winezgui-get-window-height ${#FILES[@]}

# # if [ ${#FILES[@]} -eq 1 ]; then
# #      export SELECTED_EXE="${FILES}"
# # --height=300s     
# # else
#      # 3. Show the found exe files using zenity
#      unset COMMAND
#      COMMAND+="${ZENITY_CMD}  --title=\"${APP_WITH_VER} - Shortcuts\" "
#      COMMAND+="--list --checklist --width=460 --height=${HEIGHT} "
#      COMMAND+="--text=\"${PREFIXNAME}, choose exe for shortcuts...\" "
#      COMMAND+="--hide-header --column \" \" --column \"Action\" ${SHOW_OPTION}"
#      LIST_OF_EXES_FOR_SHORTCUTS=$(eval ${COMMAND})

#      if [ -z "${LIST_OF_EXES_FOR_SHORTCUTS}" ]; then
#           echo "Cancelled!"
#           Script_Window
#      fi
#     export LIST_OF_EXES_FOR_SHORTCUTS
#     echo "${LIST_OF_EXES_FOR_SHORTCUTS}"

     count=0
    # # 4. Find which file the user selected and set the selected exe into variable
    #  for i in "${NAMES[@]}"; do
    #      if [ "$i" = "$LIST_OF_EXES_FOR_SHORTCUTS" ]; then
    #           echo "Selected $i"
    #           echo "File is ${FILES[${count}]}"
    #           export SELECTED_EXE="${FILES[${count}]}"
    #           export SELECTED_EXE_NAME=$(basename "${SELECTED_EXE}")
    #           break
    #      fi
    #      count=$(expr ${count} + 1)
    #  done
# fi
  # get the variable LIST_OF_EXES_FOR_SHORTCUTS filled
#   SOURCE script-get-selected-exes-for-shortcuts
#   script-get-selected-exes-for-shortcuts
#   echo "x==x==x==x==x==x==x==x==x==x==x==x==x==x==x==x"
#   for i in $(echo ${LIST_OF_EXES_FOR_SHORTCUTS}|tr '|' '\n'|sort); do
#       echo "${i}"
#   done

}
