#!/bin/sh
set -e

CONFIG_DIR="$HOME/.open-claudia"
ENV_FILE="$CONFIG_DIR/.env"

mkdir -p "$CONFIG_DIR"

# If .env doesn't exist and a channel token is set, auto-configure.
# CHANNELS env selects which channels to enable; defaults to telegram for
# backwards compat with v1 installs.
if [ ! -f "$ENV_FILE" ] && { [ -n "$TELEGRAM_BOT_TOKEN" ] || [ -n "$KAZEE_BOT_TOKEN" ]; }; then
  echo "Auto-configuring from environment variables..."

  if [ -z "$CHANNELS" ]; then
    if [ -n "$TELEGRAM_BOT_TOKEN" ] && [ -n "$KAZEE_BOT_TOKEN" ]; then
      CHANNELS="telegram,kazee"
    elif [ -n "$KAZEE_BOT_TOKEN" ]; then
      CHANNELS="kazee"
    else
      CHANNELS="telegram"
    fi
  fi

  cat > "$ENV_FILE" <<ENVEOF
CHANNELS=${CHANNELS}
TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN:-}
TELEGRAM_CHAT_ID=${TELEGRAM_CHAT_ID:-}
KAZEE_URL=${KAZEE_URL:-}
KAZEE_BOT_TOKEN=${KAZEE_BOT_TOKEN:-}
KAZEE_BOT_USER_ID=${KAZEE_BOT_USER_ID:-}
KAZEE_OWNER_USER_ID=${KAZEE_OWNER_USER_ID:-}
WORKSPACE=${WORKSPACE:-$HOME/Workspace}
CLAUDE_PATH=${CLAUDE_PATH:-claude}
SOUL_FILE=$CONFIG_DIR/soul.md
CRONS_FILE=$CONFIG_DIR/crons.json
VAULT_FILE=$CONFIG_DIR/vault.enc
AUTH_FILE=$CONFIG_DIR/auth.json
ONBOARDED=true
WEB_UI=${WEB_UI:-true}
WEB_PORT=${WEB_PORT:-8080}
ENVEOF

  # Create workspace directory
  mkdir -p "${WORKSPACE:-$HOME/Workspace}"

  # Create default soul
  if [ ! -f "$CONFIG_DIR/soul.md" ]; then
    cat > "$CONFIG_DIR/soul.md" <<'SOUL'
You are a helpful AI coding assistant.
Keep responses concise — this is a mobile screen.
Act on screenshots, fix bugs, implement designs.
SOUL
  fi

  # Create empty files if missing
  [ -f "$CONFIG_DIR/crons.json" ] || echo "[]" > "$CONFIG_DIR/crons.json"
  [ -f "$CONFIG_DIR/auth.json" ] || echo '{"authorized":[],"pending":[]}' > "$CONFIG_DIR/auth.json"

  echo "Configuration written to $ENV_FILE"
fi

# Identity sync: pod-provisioned env is authoritative for identity keys.
# The config loader prefers .env file values over process env, so a retained
# disk attached to a NEW bot would otherwise keep the old bot's identity
# (tokens, owner). Re-seed identity keys from env on every boot — only keys
# actually set in the environment; everything else in .env is untouched.
if [ -f "$ENV_FILE" ]; then
  sync_env_key() {
    key="$1"; value="$2"
    [ -n "$value" ] || return 0
    tmp="$ENV_FILE.identity-sync"
    grep -v "^${key}=" "$ENV_FILE" > "$tmp" || true
    printf '%s=%s\n' "$key" "$value" >> "$tmp"
    mv "$tmp" "$ENV_FILE"
  }
  sync_env_key CHANNELS "$CHANNELS"
  sync_env_key TELEGRAM_BOT_TOKEN "$TELEGRAM_BOT_TOKEN"
  sync_env_key TELEGRAM_CHAT_ID "$TELEGRAM_CHAT_ID"
  sync_env_key KAZEE_URL "$KAZEE_URL"
  sync_env_key KAZEE_BOT_TOKEN "$KAZEE_BOT_TOKEN"
  sync_env_key KAZEE_BOT_USER_ID "$KAZEE_BOT_USER_ID"
  sync_env_key KAZEE_OWNER_USER_ID "$KAZEE_OWNER_USER_ID"
fi

# Execute the main command
exec "$@"
