#!/usr/bin/env bash
# Variables to Change in Script file
# 1. PROGNAME
# 2. EXE_FILE
# 3. EXE_NAME
# 4. CHECKSUM
# 5. EXE_PATH
# 6. EXE_NOSP
# 7. EXE_LESS

script-change-exe-variables()
{
  dbug "I: Script: Launched ${FUNCNAME[0]}"
  
  SOURCE "script-check-variables-loaded-or-not"
  script-check-variables-loaded-or-not
  # 2. EXE_FILE (SELECTED_EXE is the NEW_EXE_FILE)
  NEW_EXE_FILE="${SELECTED_EXE}"

  # 3. EXE_NAME (basename of NEW_EXE_FILE is NEW_EXE_NAME)
  NEW_EXE_NAME=$(basename "${SELECTED_EXE}")

  # 4. CHECKSUM (Generate NEW_CHECKSUM)
  NEW_CHECKSUM=$(sha256sum "${SELECTED_EXE}"|cut -f1 -d " ")
  dbug "I: Script: ${FUNCNAME[0]}: Sha256sum: ${NEW_CHECKSUM}"

  # 5. EXE_PATH (dirname of SELECTED_EXE is NEW_EXE_PATH)
  NEW_EXE_PATH=$(dirname  "${SELECTED_EXE}")

  # 6. EXE_NOSP (replace space with underscore of SELECTED_EXE is NEW_EXE_NOSP)
  NEW_EXE_NOSP=$(echo ${NEW_EXE_NAME}|tr " " "_");

  # 7. EXE_LESS (SELECTED_EXE without .exe or .msi is the NEW_EXE_LESS)
  NEW_EXE_LESS=$(echo ${NEW_EXE_NOSP}|sed "s/\.[Ee][Xx][Ee]//" \
                                     |sed "s/\.[Mm][Ss][Ii]//")

  # 1. PROGNAME (Get NEW_PROGNAME)
  # Automatically set name, read from pe file, if not found use exe name
  NEW_PRODUCT="$(${EXIFTOOL} "${SELECTED_EXE}"| \
                 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 ${NEW_PRODUCT}|grep -aEv [a-zA-Z]) ] || [ -z "${NEW_PRODUCT}" ] ;
       then
       unset NEW_PRODUCT
       unset NEW_PROGNAME
       #NEW_PROGNAME=$(echo "${NEW_EXE_NAME} (${APP_WITH_VER})"
       NEW_PROGNAME=$(echo "${NEW_EXE_NAME}" \
                      |sed "s/\.[eE][Xx][Ee]//g");
       dbug "I: Script: ${FUNCNAME[0]}: Product Name not found, using exe name"
  else
       #NEW_PROGNAME="$(echo "${NEW_PRODUCT} (${APP_WITH_VER})")"
       NEW_PROGNAME="$(echo "${NEW_PRODUCT}")"
       dbug "I: Script: ${FUNCNAME[0]}: Product Name found: \"${NEW_PRODUCT}\""
  fi
  ########### NOW CHANGE THE ABOVE IN SCRIPTFILE ###########
  E="export " # for 80 column rule
  sed "s|${E}PROGNAME=.*|${E}PROGNAME=\"${NEW_PROGNAME}\"|g; t;" -i ${SCRIPTFILE} || echo "Failed:sh1: ${NEW_PROGNAME}"
  sed "s|${E}EXE_FILE=.*|${E}EXE_FILE=\"${NEW_EXE_FILE}\"|g; t;" -i ${SCRIPTFILE} || echo "Failed:sh2: ${NEW_EXE_FILE}"
  sed "s|${E}EXE_NAME=.*|${E}EXE_NAME=\"${NEW_EXE_NAME}\"|g; t;" -i ${SCRIPTFILE} || echo "Failed:sh3: ${NEW_EXE_NAME}"
  sed "s|${E}EXE_PATH=.*|${E}EXE_PATH=\"${NEW_EXE_PATH}\"|g; t;" -i ${SCRIPTFILE} || echo "Failed:sh4: ${NEW_EXE_PATH}"
  sed "s|${E}EXE_NOSP=.*|${E}EXE_NOSP=\"${NEW_EXE_NOSP}\"|g; t;" -i ${SCRIPTFILE} || echo "Failed:sh5: ${NEW_EXE_NOSP}"
  sed "s|${E}CHECKSUM=.*|${E}CHECKSUM=\"${NEW_CHECKSUM}\"|g; t;" -i ${SCRIPTFILE} || echo "Failed:sh6: ${NEW_CHECKSUM}"
  sed "s|${E}EXE_LESS=.*|${E}EXE_LESS=\"${NEW_EXE_LESS}\"|g; t;" -i ${SCRIPTFILE} || echo "Failed:sh7: ${NEW_EXE_LESS}"

  ####### Change Info.yml
  sed "s|Name:.*|Name:${NEW_PROGNAME}|g; t;"            -i "${INFOFILE}" || echo "Failed: Info.yml1:${NEW_PROGNAME}"
  sed "s|Exe:.*|Exe:${NEW_EXE_FILE}|g; t;"              -i "${INFOFILE}" || echo "Failed: Info.yml2:${NEW_EXE_FILE}"
  sed "s|Exe Path:.*|Exe Path:${NEW_EXE_PATH}|g; t;"    -i "${INFOFILE}" || echo "Failed: Info.yml3:${NEW_EXE_PATH}"
  sed "s|Sha256sum:.*|Sha256sum:${NEW_CHECKSUM}|g; t;"  -i "${INFOFILE}" || echo "Failed: Info.yml4:${NEW_CHECKSUM}"

  ####### Change Desktop file
  sed "s|Name=.*|Name=${NEW_PROGNAME}|g; t;" -i "${DESKTOPFILE}" || echo "Failed: desktop1:${NEW_PROGNAME}"
  sed "s|Keywords=.*|Keywords=winezgui; game; ${NEW_PROGNAME}|g; t;" -i "${DESKTOPFILE}" || echo "Failed: desktop2: ${NEW_PROGNAME}"

  # SET x permission to desktop and script files
  chmod +rx "${DESKTOPFILE}" "${SCRIPTFILE}" "${S_SCRIPTFILE}" "${S_DESKTOPFILE}"
  # Launch Script after modification
  "${SCRIPTFILE}" &
  exit 0
}
