
#!/usr/bin/env bash

# Find the current file directory, supporting symlinks
WEX_DIR_CLI="$(realpath "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")/"

# Source initialization scripts
. "${WEX_DIR_CLI}/_init.sh"
. "${WEX_DIR_CLI}/_init_sudo.sh"

# Set WEX_DIR_ROOT
WEX_DIR_ROOT=$(realpath "${WEX_DIR_CLI}../")/

echo "Checking Python requirements..."

# Determine the real user (SUDO_USER when invoked via sudo, else USER, else root)
INSTALL_USER="${SUDO_USER:-${USER:-root}}"

# Update package list — skip when apt deps are already handled (e.g. dpkg postinst)
if [ -z "${WEX_SKIP_APT}" ]; then
    echo "Updating package list..."
    apt-get update
fi

# Setup Python virtual environment
echo "Setting up Python virtual environment..."

# Standard venv path at project root
VENV_PATH="${WEX_DIR_ROOT}.venv"

# Remove existing venv if present
if [ -d "$VENV_PATH" ]; then
    echo "Removing existing virtual environment..."
    rm -rf "$VENV_PATH"
fi

# Create new virtual environment with copied binaries (not symlinks)
echo "Creating new virtual environment..."
PYTHON_BIN=""
for py in python3.13 python3.12 python3.11; do
    if command -v "$py" >/dev/null 2>&1; then
        PYTHON_BIN=$(command -v "$py")
        break
    fi
done
if [ -z "$PYTHON_BIN" ]; then
    echo "Error: python3.11+ is required but not found (tried python3.13, python3.12, python3.11)" >&2
    exit 1
fi
echo "Using $PYTHON_BIN"
"$PYTHON_BIN" -m venv "$VENV_PATH" --clear --copies

# Fix permissions
echo "Fixing virtual environment permissions..."
chown -R "${INSTALL_USER}:${INSTALL_USER}" "$VENV_PATH"

# Activate virtual environment
echo "Activating virtual environment..."
# shellcheck disable=SC1090
. "${VENV_PATH}/bin/activate"

# Upgrade pip and setuptools
echo "Upgrading pip and setuptools..."
pip install -q --upgrade pip setuptools wheel

echo "Installing Python requirements..."
pip install -q -r "${WEX_DIR_ROOT}requirements.txt"

echo "Cleanup..."
rm -f "${WEX_DIR_ROOT}tmp/registry.yml"

echo "Configuring..."
WEX_ENV_PATH="${WEX_DIR_ROOT}.env"
touch "${WEX_ENV_PATH}"
# Ensure APP_ENV is set to prod (overwrite any existing value, e.g. "local" from dev)
sed -i '/^APP_ENV=/d' "${WEX_ENV_PATH}"
echo "APP_ENV=prod" >> "${WEX_ENV_PATH}"

# Load env to read APP_ENV
# shellcheck disable=SC1090
. "${WEX_ENV_PATH}"
export APP_ENV

echo "Installing symlink..."
ln -sf "${WEX_DIR_CLI}wex" /usr/local/bin/wex

echo "Installing autocomplete..."
chmod +x "${WEX_DIR_CLI}autocomplete" "${WEX_DIR_CLI}autocomplete-handler" "${WEX_DIR_CLI}autocomplete-addon"
echo ". ${WEX_DIR_CLI}autocomplete-handler" > /etc/bash_completion.d/wex

# On dev machine, install local editable packages over the venv
if [ "${APP_ENV}" = "local" ]; then
    echo "Installing local dev packages..."
    # shellcheck disable=SC1090
    bash "${WEX_DIR_CLI}install-dev"
fi

echo "Building registry..."
bash "${WEX_DIR_CLI}wex" core::registry/build

# Reload bashrc — only in interactive sessions, not during dpkg postinst
if [ -z "${DEBIAN_FRONTEND}" ] && [ -f ~/.bashrc ]; then
    echo "Reload bashrc changes..."
    # shellcheck disable=SC1090
    . ~/.bashrc
fi

echo "Installation complete!"
