#!/bin/bash
# Remove user (analyst or admin)
# Usage: sudo remove-analyst username [--force]
#
# Note: This script uses explicit error handling instead of set -e.
# set -e causes silent exits with command substitutions and pipefail,
# which is unacceptable for admin scripts that must always report what happened.

set -u  # Catch unset variables, but no -e (explicit error handling)

if [[ $EUID -ne 0 ]]; then
    echo "Error: This script must be run as root (use sudo)"
    exit 1
fi

# Parse arguments
FORCE=false
USERNAME=""

for arg in "$@"; do
    case $arg in
        --force|-f)
            FORCE=true
            ;;
        *)
            USERNAME="$arg"
            ;;
    esac
done

if [[ -z "$USERNAME" ]]; then
    echo "Usage: sudo remove-analyst username [--force]"
    echo "  --force, -f  Skip confirmation prompt"
    exit 1
fi

# Check if user exists
if ! id "$USERNAME" &>/dev/null; then
    echo "Error: User '$USERNAME' does not exist"
    exit 1
fi

# Prevent removing yourself
CURRENT_USER=$(logname 2>/dev/null || echo "${SUDO_USER:-unknown}")
if [[ "$USERNAME" == "$CURRENT_USER" ]]; then
    echo "Error: Cannot remove yourself"
    exit 1
fi

# Get user info (avoid using GROUPS - it's a bash special variable for current user's GIDs)
USER_GROUPS=$(id -nG "$USERNAME" 2>/dev/null) || USER_GROUPS="(unknown)"
HOME_DIR="/home/$USERNAME"
HOME_EXISTS=false
[[ -d "$HOME_DIR" ]] && HOME_EXISTS=true

echo "Removing user: $USERNAME"
echo "  Groups: $USER_GROUPS"
echo "  Home: $HOME_DIR ($([ "$HOME_EXISTS" = true ] && echo "exists" || echo "already missing"))"

if [[ "$FORCE" != true ]]; then
    read -p "Are you sure? [y/N] " -n 1 -r
    echo ""
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        echo "Cancelled"
        exit 0
    fi
fi

# Remove user and home directory
echo "  Deleting OS user..."
USERDEL_ERR=$(userdel -r "$USERNAME" 2>&1)
USERDEL_EXIT=$?
if [[ $USERDEL_EXIT -eq 0 ]]; then
    if [[ "$HOME_EXISTS" = true ]]; then
        echo "  User and home directory removed"
    else
        echo "  User removed (home directory was already missing)"
    fi
elif userdel "$USERNAME" 2>/dev/null; then
    echo "  User removed (userdel -r failed: $USERDEL_ERR)"
    if [[ -d "$HOME_DIR" ]]; then
        rm -rf "$HOME_DIR"
        echo "  Home directory $HOME_DIR removed"
    fi
else
    echo "Error: Failed to remove user '$USERNAME'"
    echo "  userdel error: $USERDEL_ERR"
    echo "  Check if processes are running as this user: ps -u $USERNAME"
    exit 1
fi

# Verify removal
if id "$USERNAME" &>/dev/null; then
    echo "Warning: User '$USERNAME' still exists (OS login system may have re-created it)"
    exit 1
fi

echo "User '$USERNAME' removed successfully"
