#!/sbin/sh

destDir=$system/addon.d
NikGappsDir=$destDir
addon_index=10
fileName=$1
installSource=$2
deleteSource=$2
debloaterSource=$2
[ -n "$3" ] && addon_index=$3
dest="$destDir/$addon_index-$fileName.sh"
mkdir -p "$destDir"
TMPDIR=/dev/tmp
COMMONDIR=$TMPDIR/NikGappsScripts
if $BOOTMODE; then
  COMMONDIR=$MODPATH/NikGappsScripts
  mkdir -p "$COMMONDIR"
fi
addonDir="/sdcard/NikGapps/addonLogs"
nikGappsTestLog="$addonDir/logfiles/NikGapps.log"
newline='
'

echo_add_to_log() {
  echo ""
  echo "addToLog() {"
  echo "  echo \"\$(date +%Y_%m_%d_%H_%M_%S): \$1\" >> \$nikGappsAddonLogFile"
  echo "}"
  echo ""
}

list_build_props() {
  echo ""
  echo "list_build_props() {"
  echo "cat <<EOF"

  if [ -f "$installSource" ]; then
    OLD_IFS="$IFS"
    IFS="$(printf '%b_' ' \n')"
    IFS="${IFS%_}"
    g=$(grep "buildprop=" "$installSource" | cut -d= -f2-)
    for i in $g; do
      echo "$i"
    done
    IFS="$OLD_IFS"
  fi

  echo "EOF"
  echo "}"
  echo ""
}

list_files() {
  echo ""
  echo "list_files() {"
  echo "cat <<EOF"

  if [ -f "$installSource" ]; then
    OLD_IFS="$IFS"
    IFS="$(printf '%b_' ' \n')"
    IFS="${IFS%_}"
    g=$(grep "install=" "$installSource" | cut -d= -f2)
    for i in $g; do
      if [ -f "$system/$i" ]; then
        echo "$i"
      fi
    done
    IFS="$OLD_IFS"
  fi

  echo "EOF"
  echo "}"
  echo ""
}

list_delete_folders() {
  echo ""
  echo "delete_folders() {"
  echo "cat <<EOF"

  if [ -f "$deleteSource" ]; then
    OLD_IFS="$IFS"
    IFS="$(printf '%b_' ' \n')"
    IFS="${IFS%_}"
    g=$(grep "delete=" "$deleteSource" | cut -d= -f2)
    for i in $g; do
      echo "$i"
    done
    IFS="$OLD_IFS"
  fi

  echo "EOF"
  echo "}"
  echo ""
}

list_force_delete_folders() {
  echo ""
  echo "force_delete_folders() {"
  echo "cat <<EOF"

  if [ -f "$deleteSource" ]; then
    OLD_IFS="$IFS"
    IFS="$(printf '%b_' ' \n')"
    IFS="${IFS%_}"
    g=$(grep "forceDelete=" "$deleteSource" | cut -d= -f2)
    for i in $g; do
      echo "$i"
    done
    IFS="$OLD_IFS"
  fi

  echo "EOF"
  echo "}"
  echo ""
}

list_debloat_folders() {
  echo ""
  echo "debloat_folders() {"
  echo "cat <<EOF"

  if [ -f "$debloaterSource" ]; then
    OLD_IFS="$IFS"
    IFS="$(printf '%b_' ' \n')"
    IFS="${IFS%_}"
    g=$(grep "debloat=" "$debloaterSource" | cut -d= -f2)
    for i in $g; do
      echo "$i"
    done
    IFS="$OLD_IFS"
  fi

  echo "EOF"
  echo "}"
  echo ""
}

list_force_debloat_folders() {
  echo ""
  echo "force_debloat_folders() {"
  echo "cat <<EOF"

  if [ -f "$debloaterSource" ]; then
    OLD_IFS="$IFS"
    IFS="$(printf '%b_' ' \n')"
    IFS="${IFS%_}"
    g=$(grep "forceDebloat=" "$debloaterSource" | cut -d= -f2)
    for i in $g; do
      echo "$i"
    done
    IFS="$OLD_IFS"
  fi

  echo "EOF"
  echo "}"
  echo ""
}

backup() {
  echo " backup)"
  echo "   ui_print \"- Backing up $fileName\""
  echo "   list_files | while read FILE DUMMY; do"
  echo "     backup_file \$S/\"\$FILE\""
  echo "   done"
  echo " ;;"
}

restore() {
  echo " restore)"
  echo "   addToLog \" \""
  echo "   ui_print \"- Restoring $fileName\""
  echo "   delete_in_system \"\$(delete_folders)\" \"Deleting aosp app\""
  echo "   delete_in_system \"\$(force_delete_folders)\" \"Force Deleting\""
  echo "   delete_in_system \"\$(debloat_folders)\" \"Debloating\""
  echo "   delete_in_system \"\$(force_debloat_folders)\" \"Force Debloating\""
  echo "   list_files | while read FILE REPLACEMENT; do"
  echo "     R=\"\""
  echo "     [ -n \"\$REPLACEMENT\" ] && R=\"\$S/\$REPLACEMENT\""
  echo "     [ -f \"\$C/\$S/\$FILE\" ] && restore_file \$S/\"\$FILE\" \"\$R\" && addToLog \"- \$S/\$FILE copied\""
  echo "   done"
  echo "   for i in \$(list_files); do"
  echo "     f=\$(get_output_path \"\$S/\$i\")"
  echo "     chown root:root \"\$f\""
  echo "     chmod 644 \"\$f\""
  echo "     chmod 755 \$(dirname \$f)"
  echo "   done"
  echo "   if list_build_props | grep -q '.'; then"
  echo "     restore_build_props"
  echo "   fi"
  echo " ;;"
}

run() {
  echo " "
  echo "if [ \"\$execute_config\" = \"0\" ]; then"
  echo "  if [ -f \"\$S/addon.d/$addon_index-$fileName.sh\" ]; then"
  echo "    ui_print \"- Deleting up $fileName.sh\""
  echo "    rm -rf \$S/addon.d/$addon_index-$fileName.sh"
  echo "    rm -rf \$T/addon.d/$addon_index-$fileName.sh"
  echo "  fi"
  echo "  exit 1"
  echo "fi"
  echo " "
  echo "if [ ! -f \"\$S/addon.d/$addon_index-$fileName.sh\" ]; then"
  echo "  test \"\$execute_config\" = \"1\" && CopyFile \"\$0\" \"\$S/addon.d/$addon_index-$fileName.sh\""
  echo "fi"
  echo " "
  echo "case \"\$1\" in"
  backup
  restore
  echo "esac"
}

# Read the config file from (Thanks to xXx @xda)
ReadConfigValue() {
  value=$(sed -e '/^[[:blank:]]*#/d;s/[\t\n\r ]//g;/^$/d' "$2" | grep "^$1=" | cut -d'=' -f 2)
  echo "$value"
  return $?
}

header() {
  echo "#!/sbin/sh"
  echo "#"
  echo "# ADDOND_VERSION=3"
}

for i in $(find $destDir -iname "*$fileName.sh" 2>/dev/null;); do
  if [ -f "$i" ]; then
    rm -rf "$i"
  fi
done

header > "$dest"
cat "$COMMONDIR/header" >> "$dest"
{
  echo_add_to_log
  cat "$COMMONDIR/functions"
  list_build_props
  list_files
  list_delete_folders
  list_force_delete_folders
  list_debloat_folders
  list_force_debloat_folders
  run
} >>"$dest"
chmod 755 "$dest"
mkdir -p "$addon_scripts_logDir"
cat "$dest" > "$addon_scripts_logDir/$addon_index-$fileName.sh"