#!/bin/bash

# Runs only when this signed package's cleanup component is selected.
set -euo pipefail

TARGET_VOLUME="${3:?missing installer target volume}"
SCRIPT_DIR=$(cd -P "$(/usr/bin/dirname "$0")" && /bin/pwd -P)
USER_CLEANUP="$SCRIPT_DIR/remove-uv-tool-user"
USER_CLEANUP_DIR=""
RUNTIME_USER_CLEANUP=""

remove_user_cleanup_copy() {
    [ -z "$USER_CLEANUP_DIR" ] || /bin/rm -rf "$USER_CLEANUP_DIR" || true
}

prepare_user_cleanup() {
    [ -f "$USER_CLEANUP" ] && [ ! -L "$USER_CLEANUP" ] || return 1

    USER_CLEANUP_DIR=$(
        /usr/bin/mktemp -d /var/tmp/runlayer-uv-cleanup.XXXXXX
    ) || return 1
    /bin/chmod 755 "$USER_CLEANUP_DIR" ||
        { remove_user_cleanup_copy; return 1; }
    RUNTIME_USER_CLEANUP="$USER_CLEANUP_DIR/remove-uv-tool-user"
    /bin/cp "$USER_CLEANUP" "$RUNTIME_USER_CLEANUP" ||
        { remove_user_cleanup_copy; return 1; }
    /usr/sbin/chown root:wheel "$RUNTIME_USER_CLEANUP" ||
        { remove_user_cleanup_copy; return 1; }
    /bin/chmod 755 "$RUNTIME_USER_CLEANUP" ||
        { remove_user_cleanup_copy; return 1; }
}

run_user_cleanup() {
    local user_home="$1"
    local user_uid="$2"

    /usr/bin/sudo -n -H -u "#$user_uid" -- \
        /bin/bash "$RUNTIME_USER_CLEANUP" "$user_home" "$user_uid" || true
}

if prepare_user_cleanup; then
    trap remove_user_cleanup_copy EXIT
    while read -r user_name user_uid; do
        case "$user_uid" in
            ""|*[!0-9]*) continue ;;
        esac
        [ "$user_uid" -ge 500 ] || continue

        user_home=$(
            /usr/bin/dscl /Search -read "/Users/${user_name}" NFSHomeDirectory \
                2>/dev/null | /usr/bin/cut -d ' ' -f 2-
        ) || continue
        case "$user_home" in
            /|""|[!/]*) continue ;;
        esac
        if [ "$TARGET_VOLUME" != "/" ]; then
            user_home="${TARGET_VOLUME%/}${user_home}"
        fi
        [ -d "$user_home" ] && [ ! -L "$user_home" ] || continue
        user_home=$(cd -P "$user_home" 2>/dev/null && /bin/pwd -P) || continue

        run_user_cleanup "$user_home" "$user_uid"
    done < <(/usr/bin/dscl . -list /Users UniqueID 2>/dev/null || true)
fi

exit 0
