#!/usr/bin/env sh
# Persist Claude Desktop sign-in across restarts.
# Claude Desktop (Electron) stores its auth token via safeStorage, which on Linux needs the
# Secret Service API (org.freedesktop.secrets). Provide it with gnome-keyring on the openbox
# session bus (startwm.sh runs `dbus-launch --exit-with-session`), unlocked with an empty
# password so it comes back automatically after a restart. The keyring DB lives under
# $HOME/.local/share/keyrings, and HOME=/data/data is persistent add-on storage, so the
# saved sign-in survives add-on restarts.
eval "$(gnome-keyring-daemon --start --components=secrets 2>/dev/null)" || true
printf '' | gnome-keyring-daemon --unlock 2>/dev/null || true
export GNOME_KEYRING_CONTROL SSH_AUTH_SOCK
dbus-update-activation-environment --all >/dev/null 2>&1 || true

# --password-store=gnome-libsecret forces Electron onto the libsecret backend instead of
# falling back to plaintext (and warning that the sign-in will not be saved).
CLAUDE_DESKTOP_COMMAND_FILE="/tmp/claude-desktop-command"
DEFAULT_CLAUDE_DESKTOP_COMMAND="claude-desktop --no-sandbox --disable-dev-shm-usage --password-store=gnome-libsecret"
if [ -s "$CLAUDE_DESKTOP_COMMAND_FILE" ]; then
    CLAUDE_DESKTOP_COMMAND="$(cat "$CLAUDE_DESKTOP_COMMAND_FILE")"
else
    CLAUDE_DESKTOP_COMMAND="$DEFAULT_CLAUDE_DESKTOP_COMMAND"
fi
if bashio::config.true 'install_headroom'; then
    export ANTHROPIC_BASE_URL="http://127.0.0.1:8787"
fi

# Launch the configured command. If a custom/wrapped command fails to start, fall back to
# the plain Claude Desktop launch so the desktop app still comes up for the user.
if ! sh -c "$CLAUDE_DESKTOP_COMMAND"; then
    if [ "$CLAUDE_DESKTOP_COMMAND" != "$DEFAULT_CLAUDE_DESKTOP_COMMAND" ]; then
        echo "autostart: '$CLAUDE_DESKTOP_COMMAND' failed; falling back to default Claude Desktop launch" >&2
        exec sh -c "$DEFAULT_CLAUDE_DESKTOP_COMMAND"
    fi
fi
