#!/bin/bash -e

log_info() {
  echo -e "\e[1m\e[96m[factory-reset]:\e[0m\e[1m $1\e[0m"
}

remove_files() {
  WHITELIST="^/tree
^/dev
^/efi
^/etc
^/run
^/usr
^/var/lib/apt/gen
^/var/lib/apt/extended_states
^/var/lib/dkms
^/var/lib/dpkg
^/var/log/journal$
^/usr/lib/locale/locale-archive
^/root
^/home
^/proc
^/sys
/\.updated$"
  local DPKG_FILES ALL_FILES RM_FILES PATTERN_FILES
  local FIND_PID
  DPKG_FILES="$(mktemp)"
  ALL_FILES="$(mktemp)"
  RM_FILES="$(mktemp)"
  PATTERN_FILES="$(mktemp)"
  log_info '[1/4] Un-mounting bind-mounts ...'
  umount /debs || true
  umount /var/cache/acbs/tarballs || true
  log_info '[2/4] Collecting files from dpkg ...'
  find / -mindepth 2 >>"$ALL_FILES" &
  FIND_PID="$!"
  cat /var/lib/dpkg/info/*.list >"$DPKG_FILES"
  wait "$FIND_PID"
  log_info '[3/4] Calculating changes ...'
  echo "$WHITELIST" >"$PATTERN_FILES"
  grep -vEf "$PATTERN_FILES" <"$ALL_FILES" >"${ALL_FILES}.new"
  mv "${ALL_FILES}.new" "$ALL_FILES"
  grep -vxFf "$DPKG_FILES" <"$ALL_FILES" >"$RM_FILES"
  log_info '[4/4] Removing files ...'
  xargs -a "$RM_FILES" rm -rfv
  rm -fv "$ALL_FILES" "$DPKG_FILES" "$RM_FILES"
}

CIEL_INST="${1:-$CIEL_INST}"
[ -z "$CIEL_INST" ] && (echo "No instance specified" && exit 1)
ciel down -i "$CIEL_INST"
ciel mount -i "$CIEL_INST"
declare -f log_info remove_files >"$CIEL_INST/rm-script"
echo "remove_files; rm -fv '/rm-script'" >>"$CIEL_INST/rm-script"
chmod a+x "$CIEL_INST/rm-script"
ciel shell -i "$CIEL_INST" "/rm-script" --no-local-repo
