#!/bin/bash
# cmd/upgrade_callback - post-upgrade hook
# Re-sync dependencies after code replacement using uv.

APP_DIR="${TRIM_APPDEST}/langbot"

# Persistent data root (must match cmd/main)
DATA_DIR="${TRIM_DATA_SHARE_PATHS%%:*}"
[ -z "${DATA_DIR}" ] && DATA_DIR="${TRIM_PKGVAR}/data"

# Apply port from upgrade wizard (config persists across upgrades; this
# only rewrites it when the user changed the value in the upgrade wizard)
CONFIG_FILE="${DATA_DIR}/config.yaml"
if [ -n "${wizard_port:-}" ] && [ -f "${CONFIG_FILE}" ]; then
    case "${wizard_port}" in
        ''|*[!0-9]*) ;;
        *)
            sed -i -E "/^api:/,/^[a-z_]+:/ s/^([[:space:]]*port:).*/\1 ${wizard_port}/" "${CONFIG_FILE}"
            sed -i "s#webhook_prefix: 'http://127\.0\.0\.1:[0-9]*'#webhook_prefix: 'http://127.0.0.1:${wizard_port}'#" "${CONFIG_FILE}"
            ;;
    esac
fi

cd "${APP_DIR}" || {
    echo "App directory missing after upgrade" > "${TRIM_TEMP_LOGFILE}"
    exit 1
}

# Find uv (bundled first, then PATH / ~/.local/bin / ~/.cargo/bin)
UV_BIN="${TRIM_PKGVAR}/bin/uv"
if [ ! -x "${UV_BIN}" ]; then
    UV_BIN="uv"
fi
if ! command -v "${UV_BIN}" >/dev/null 2>&1; then
    UV_BIN="${HOME}/.local/bin/uv"
fi
if ! command -v "${UV_BIN}" >/dev/null 2>&1 && [ ! -x "${UV_BIN}" ]; then
    UV_BIN="${HOME}/.cargo/bin/uv"
fi

PYTHON_BIN="python3"
! command -v "${PYTHON_BIN}" >/dev/null 2>&1 && PYTHON_BIN="python"

# Re-sync deps
if [ -d ".venv" ]; then
    "${UV_BIN}" sync --extra seekdb 2>/dev/null || {
        echo "Dependency sync failed after upgrade" > "${TRIM_TEMP_LOGFILE}"
        exit 1
    }
else
    # Venv was lost, recreate via uv
    if ! command -v "${UV_BIN}" >/dev/null 2>&1 && [ ! -x "${UV_BIN}" ]; then
        "${PYTHON_BIN}" -m pip install --user --no-cache-dir uv 2>/dev/null || \
        "${PYTHON_BIN}" -m pip install --no-cache-dir uv 2>/dev/null || {
            echo "Failed to install uv" > "${TRIM_TEMP_LOGFILE}"
            exit 1
        }
        export PATH="${HOME}/.local/bin:${PATH}"
        UV_BIN="uv"
    fi
    "${UV_BIN}" venv .venv --python "${PYTHON_BIN}" || {
        echo "Failed to recreate virtual environment" > "${TRIM_TEMP_LOGFILE}"
        exit 1
    }
    "${UV_BIN}" sync --extra seekdb || {
        echo "Dependency sync failed" > "${TRIM_TEMP_LOGFILE}"
        exit 1
    }
fi

# Verify frontend dist still present
if [ ! -d "web/dist" ] || [ -z "$(ls -A web/dist 2>/dev/null)" ]; then
    echo "Frontend dist missing after upgrade! Web UI will not be available." > "${TRIM_TEMP_LOGFILE}"
    exit 1
fi

exit 0
