#!/usr/bin/env bash
#winezgui-startup-checks
winezgui-startup-checks()
{
  echo "HEADER  - $HEADER"
  OLD_HEADER=${HEADER}
    
  SOURCE "script-check-variables-loaded-or-not"
  script-check-variables-loaded-or-not
  HEADER="$(basename ${0}): ${FUNCNAME[0]}"
  dbug "I: ${HEADER}: started"
  echo "HEADER  - $HEADER"
  echo "OLDHEADER  - $OLDHEADER"
  # Check if writable
  if [ ! -w "$(dirname ${WINEZGUIDIR})" ]; then
       echo "I: ${HEADER}: Cannot write to HOME directory. Bye!"
       exit 1
  fi
  # Create Main Directories
  if [ ! -d "${WINEZGUIDIR}" ]; then
       mkdir -p "${WINEZGUIDIR}" &&   \
       echo "I: ${HEADER}: Created: ${WINEZGUIDIR}"
  fi
  if [ ! -d "${TEMPLATES_DIR}" ]; then
       mkdir -p "${TEMPLATES_DIR}" && \
       echo "I: ${HEADER}: Created: ${TEMPLATES_DIR}"
  fi
  if [ ! -d "${PREFIXES_DIR}" ]; then
       mkdir -p "${PREFIXES_DIR}"  && \
       echo "I: ${HEADER}: Created: ${PREFIXES_DIR}"
  fi
  if [ ! -d "${RUNNERS_DIR}" ]; then
       mkdir -p "${RUNNERS_DIR}"  && \
       echo "I: ${HEADER}: Created: ${RUNNERS_DIR}"
  fi
  # Create tmp directory for wget and winetricks
  if [ ! -d "${TEMPDIR}" ]; then
       mkdir -p "${TEMPDIR}"
       echo "----------------------- CREATED TEMPDIR -------------------"
  fi

  #  -- Handle Wine Arch... -- #
  # If Settings.yml exists and debug: is set to true
  # If Settings.yml exists, get arch value from it: win32 or win64
  # On launch check required runtime dependencies
  if [ ! -f "${WINEZGUIDIR}/DepsCheckOK.txt" ]; then
       # Function to print if dependencies are installed.
       FOUND=()    # Array/list to hold all found commands
       NOTFOUND=() # Array/list to hold all not found commands
  
       RUNTIME="wine icotool exiftool zenity wget"
       for i in ${RUNTIME} ; do
            if [ $(which $i) ]; then
                 FOUND+="$i"
                 FOUND+=" "
            else
                 NOTFOUND+="$i"
                 NOTFOUND+=" "
            fi
       done
  
       # Show found and not found dependencies for WineZGUI
       if [ ! -z "${NOTFOUND}" ]; then
            echo "Dependencies..."
            echo "Found: ${FOUND}"
            echo "Not Found: ${NOTFOUND}"
            ${ZENITY_CMD} --info --no-wrap --title="Missing Dependencies" \
                 --text="Please install these in your system:\n${NOTFOUND}"
       else
            mkdir -p "${WINEZGUIDIR}"
            echo "Yes" > "${WINEZGUIDIR}/DepsCheckOK.txt"
       fi
  fi
  
  if [ -f "${SETTINGS_FILE}" ]; then
       if [ -w "${SETTINGS_FILE}" ]; then
       #IF runner: is not found add it
       grep "runner:" "${SETTINGS_FILE}" || echo "runner:${RUNNER}" >> "${SETTINGS_FILE}"
       #grep "no-shortcuts:" ${SETTINGS_FILE} || echo "no-shortcuts:" >> "${SETTINGS_FILE}"
       fi
       export WINEARCH=$(grep "arch:"    ${SETTINGS_FILE}|cut -f2 -d ":")
       export TEMPLATE=$(grep "template:" ${SETTINGS_FILE}|cut -f2 -d ":")
       export NO_SHORTCUTS=$(grep "no-shortcuts:" ${SETTINGS_FILE}|cut -f2 -d ":")
       export DEBUG=$(grep "debug:" ${SETTINGS_FILE}|cut -f2 -d ":")
       export USE_SINGLE_PREFIX=$(grep "single-prefix:" ${SETTINGS_FILE}|cut -f2 -d ":")
       export WINEZGUI_TEMPLATE="${TEMPLATES_DIR}/WineZGUI-${WINEARCH}"
       export TEMPLATE_NAME=$(basename ${TEMPLATE})
       echo "011 NO_SHORTCUTS =$NO_SHORTCUTS"
       echo "011. RUNNER =$RUNNER"
       echo "011. RUNNER_NAME=$RUNNER_NAME"
       echo "011. ========================================="
       export RUNNER=$(grep "runner:" ${SETTINGS_FILE}|cut -f2 -d ":")
       # If runner is not found in Settings  empty
       if [ -z "${RUNNER}" ]; then
            echo "13. RUNNER = $RUNNER NOT FOUND, USING DEFAULT WINE"
            export RUNNER="$(which wine)"
       fi
       # if runner is from local install /app/bin/wine or /usr/bin/wine etc.
       # set RUNNER_NAME
       if   [ "${RUNNER}" = "$(which wine)" ]; then
            export RUNNER_NAME="System Default"
       elif [[ "$RUNNER" == *"files/bin/wine" ]]; then
            export RUNNER_NAME=$(basename $(echo ${RUNNER}|sed "s|/files/bin/wine||g"))
       elif [[ "$RUNNER" == *"/bin/wine" ]]; then
            export RUNNER_NAME=$(basename $(echo ${RUNNER}|sed "s|/bin/wine||g"))
       fi
       echo "012. RUNNER =$RUNNER"
       echo "012. RUNNER_NAME=$RUNNER_NAME"
       echo "012. ========================================="
       export DEFAULT="${TEMPLATE}"
       export WINEPREFIX="${DEFAULT}"

       
  fi
  
  # If Settings.yml does not exists, add arch:win64 and template:WineZGUI-win64
  if [ ! -f "${SETTINGS_FILE}" ] && [ -w ${WINEZGUIDIR} ]; then
       export WINEARCH="win64"
       export WINEZGUI_TEMPLATE="${TEMPLATES_DIR}/WineZGUI-${WINEARCH}"
       dbug "I: Winearch not defined in ${SETTINGS_FILE}; setting arch to win64"
       dbug "I: Prefix template not defined in ${SETTINGS_FILE}"
       dbug "I: using ${WINEZGUI_TEMPLATE}"
       echo "arch:win64" >> "${SETTINGS_FILE}"
       echo "template:${WINEZGUI_TEMPLATE}" >> "${SETTINGS_FILE}"
       export TEMPLATE="${WINEZGUI_TEMPLATE}"
       export TEMPLATE_NAME=$(basename ${TEMPLATE})
       export RUNNER="$(which wine)"
       export RUNNER_NAME="System Default"
       echo "runner:${RUNNER}" >> "${SETTINGS_FILE}"
       echo "debug:Y" >> "${SETTINGS_FILE}"
       export DEBUG="Y"
       export DEFAULT="${TEMPLATE}"
       export WINEPREFIX="${DEFAULT}"
  fi
  
  #WINE_CMD updated by winezgui
  #export WINEVER="$(${WINE_CMD} --version)"
  #export WINETRICKS="$(which winetricks)"
  
  echo "${FUNCNAME[0]} ---- WINE_CMD=$WINE_CMD"
  echo "${FUNCNAME[0]} ---- WINEVER=$WINEVER"
  echo "${FUNCNAME[0]} ---- WINETRICKS=$WINETRICKS"


  # If Settings.yml exists and arch: value do not match win32 or win64; use win64
  if [ "$WINEARCH" != "win32" ] && [ "$WINEARCH" != "win64" ]; then
       export WINEARCH="win64"
       echo "E: arch:wine32/wine64 not found in ${SETTINGS_FILE}; using win64"
       echo "arch:win64" >> "${SETTINGS_FILE}"
       export WINEZGUI_TEMPLATE="${TEMPLATES_DIR}/WineZGUI-${WINEARCH}"
  fi
  
  # -- HANDLE Templates -- #
  # If Template Directory not found, set default to WineZGUI-win64 prefix template
  if [ ! -d "${TEMPLATE}" ]; then
       sed "s|template:.*|template:${WINEZGUI_TEMPLATE}|g" -i "${SETTINGS_FILE}"
       export TEMPLATE="${WINEZGUI_TEMPLATE}"
       export TEMPLATE_NAME=$(basename ${TEMPLATE})
  fi
  
  # Use current TEMPLATE as default $WINEPREFIX for WineZGUI
  export DEFAULT="${TEMPLATE}"

  # Create wine template and link it to defaults
  # If Default (WINEZGUI_TEMPLATE) is not found initialize it
  if [ ! -d "${WINEZGUI_TEMPLATE}" ]; then
       dbug  "I: ${HEADER}: ${WINEZGUI_TEMPLATE} does not exist, creating..."
       mkdir -p "${WINEZGUI_TEMPLATE}"
       SOURCE "winezgui-initialize-wineprefix"
       winezgui-initialize-wineprefix "${WINEZGUI_TEMPLATE}"
       SOURCE "winezgui-create-about-yml"
       winezgui-create-about-yml
  fi

  dbug "I: ${HEADER}: finished"
  HEADER="${OLD_HEADER}"
}
