#!/usr/bin/env bash
set -euo pipefail

IMAGE_HOME="/home/paseo"

: "${HOME:=$IMAGE_HOME}"
: "${PASEO_HOME:=${HOME}/.paseo}"
: "${PASEO_LISTEN:=0.0.0.0:6767}"
: "${PASEO_WEB_UI_ENABLED:=true}"
: "${PASEO_LOG_LEVEL:=info}"
: "${PASEO_LOG_FORMAT:=json}"
: "${CLAUDE_CONFIG_DIR:=${HOME}/.claude}"
: "${CODEX_HOME:=${HOME}/.codex}"
: "${XDG_CONFIG_HOME:=${HOME}/.config}"
: "${XDG_DATA_HOME:=${HOME}/.local/share}"
: "${XDG_STATE_HOME:=${HOME}/.local/state}"
: "${XDG_CACHE_HOME:=${HOME}/.cache}"

export HOME
export PASEO_HOME
export PASEO_LISTEN
export PASEO_WEB_UI_ENABLED
export PASEO_LOG_LEVEL
export PASEO_LOG_FORMAT
export CLAUDE_CONFIG_DIR
export CODEX_HOME
export XDG_CONFIG_HOME
export XDG_DATA_HOME
export XDG_STATE_HOME
export XDG_CACHE_HOME

ensure_dir() {
  local dir="$1"
  mkdir -p "$dir"
  if [[ "$(id -u)" == "0" ]]; then
    local owner
    owner="$(stat -c "%u" "$dir")"
    if [[ "$owner" == "0" ]]; then
      chown paseo:paseo "$dir"
    fi
  fi
}

ensure_dir "$HOME"
ensure_dir "$PASEO_HOME"
ensure_dir "$CLAUDE_CONFIG_DIR"
ensure_dir "$CODEX_HOME"
ensure_dir "$XDG_CONFIG_HOME"
ensure_dir "$XDG_DATA_HOME"
ensure_dir "$XDG_STATE_HOME"
ensure_dir "$XDG_CACHE_HOME"

if [[ "$#" -gt 0 ]]; then
  if [[ "$(id -u)" == "0" ]]; then
    exec gosu paseo "$@"
  fi
  exec "$@"
fi

if [[ -z "${PASEO_PASSWORD:-}" ]]; then
  {
    echo "[paseo] WARNING: PASEO_PASSWORD is not set."
    echo "[paseo] The daemon accepts unauthenticated control connections from any client that can reach it."
    echo "[paseo] Set PASEO_PASSWORD for any published port or network-reachable deployment."
  } >&2
fi

if [[ ! -f /etc/paseo-server-entry ]]; then
  echo "[paseo] FATAL: /etc/paseo-server-entry is missing." >&2
  exit 1
fi

entry="$(cat /etc/paseo-server-entry)"
echo "[paseo] starting daemon on ${PASEO_LISTEN} with web UI ${PASEO_WEB_UI_ENABLED}"
if [[ "$(id -u)" == "0" ]]; then
  exec gosu paseo node "$entry"
fi
exec node "$entry"
