#!/bin/bash
DIRECTORY="$(readlink -f "$(dirname "$0")")"

function error {
  echo -e "\e[91m$1\e[39m"
  exit 1
}

exitloop=''
while [ -z $exitloop ];do
  #ensure settings dir exists
  if [ ! -d "${DIRECTORY}/data/settings" ];then
    echo "creating settings directory"
    mkdir -p "${DIRECTORY}/data/settings"
    #create default files inside
    echo '' > "${DIRECTORY}/data/settings/reinstall-after-update"
  fi
  
  #$1 is usually left blank. If it equals 'refresh', then empty settings will be created and then the script will exit.
  if [ "$1" == 'refresh' ];then
    #set default settings, if they don't exist
    settings="$(ls "${DIRECTORY}/etc/setting-params" | tr '\n' '|')"
    PREIFS="$IFS"
    IFS='|'
    for name in $settings
    do
      if [ ! -f "${DIRECTORY}/data/settings/${name}" ] || [ -z "$(cat "${DIRECTORY}/data/settings/${name}")" ];then
        cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#' | head -n1 > "${DIRECTORY}/data/settings/${name}"
      fi
    done
    IFS="$PREIFS"
    exit 0
  fi
  
  #$1 is usually left blank. If it equals 'revert', then overwrite all settings with the defaults and then the script will exit.
  if [ "$1" == 'revert' ];then
    #overwrite all settings with the defaults
    settings="$(ls "${DIRECTORY}/etc/setting-params" | tr '\n' '|')"
    PREIFS="$IFS"
    IFS='|'
    for name in $settings
    do
      cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#' | head -n1 > "${DIRECTORY}/data/settings/${name}"
    done
    IFS="$PREIFS"
    exit 0
  fi
  
  if [ ! -f ~/.local/share/applications/pi-apps-settings.desktop ];then
    echo "Creating Settings menu button"
    echo "[Desktop Entry]
  Name=Pi Apps Settings
  Comment=Configure Pi-Apps or create an App
  Exec=${DIRECTORY}/settings
  Icon=${DIRECTORY}/icons/logo.png
  Terminal=false
  Type=Application
  Categories=Settings;" > ~/.local/share/applications/pi-apps-settings.desktop
    
  fi

  settings="$(ls "${DIRECTORY}/etc/setting-params" | tr '\n' '|')"
  yadparams=''
  tooltips=''
  PREIFS="$IFS"
  IFS='|'
  for name in $settings
  do
    params="$(cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#')"
    
    #create file if necessary
    if [ ! -f "${DIRECTORY}/data/settings/${name}" ] || [ -z "$(cat "${DIRECTORY}/data/settings/${name}")" ];then
      cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#' | head -n1 > "${DIRECTORY}/data/settings/${name}"
    fi
    #get current setting
    curval="$(cat "${DIRECTORY}/data/settings/${name}")"
    
    #order params, with selected option first
    params="$(echo "$params" | grep -x "$curval")
$(echo "$params" | grep -v "$curval")"
    
    params="$(echo "$params" | tr '\n' '!')"
    params="${params::-1}"
    
    tooltip="$(cat "${DIRECTORY}/etc/setting-params/${name}" | grep '^#' | tr -d '#' | tr '\n' '\r')"
    tooltip="${tooltip::-1}"
    #echo "Params of ${name}: ${params}"
    #echo "Tooltip of ${name}: ${tooltip}"
    
    yadparams="${yadparams}
--field=:CB
${params}"
    tooltips="${tooltips}
--field=${name}:!!${tooltip}:BTN
''"
  done
  IFS="$PREIFS"
  
  #replace all space ' ' characters with a special kind of space: a punctuation space ( ). This way, bash won't split the strings into separate words.
  yadparams="$(echo "$yadparams" | sed 's/ / /g')"
  tooltips="$(echo "$tooltips" | sed 's/ / /g')"
  
  output="$(yad --center --title='Pi-Apps Settings' --width=310 --height=300 \
    --form --separator='\n' --window-icon="${DIRECTORY}/icons/logo.png" --columns=2 \
    $tooltips \
    --field='New App'!"${DIRECTORY}/icons/create.png":FBTN "${DIRECTORY}/createapp" \
    $yadparams \
    --button='Reset'!"${DIRECTORY}/icons/backup.png"!'Reset all settings to their defaults':2 \
    --button=Cancel!"${DIRECTORY}/icons/exit.png":1 \
    --button=Save!"${DIRECTORY}/icons/check.png":0 \
    )"

  button=$? #get exit code to determine which button was pressed
  #exit if save was not clicked
  [ $button -ne 0 ]&&[ $button -ne 2 ]&&exit 0

  if [ $button -eq 2 ];then
    output=''
    "${0}" revert
  else
    exitloop=yes
  fi
done

#remove empty lines from $output
output="$(echo "$output" | sed -r '/^\s*$/d')"

echo "Output: ${output}EOO"

settings="$(ls "${DIRECTORY}/etc/setting-params" | tr '\n' '|')"

settingnumber=1

PREIFS="$IFS"
IFS='|'
for name in $settings
do
  curval="$(echo "$output" | sed -n "${settingnumber}p")"
  
  echo "Setting '$name' to '$curval'"
  echo "$curval" > "${DIRECTORY}/data/settings/${name}"
  
  settingnumber=$((settingnumber + 1))
done
IFS="$PREIFS"