#!/bin/sh
set -eu

SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
PROJECT_ROOT=$(CDPATH= cd -- "$SCRIPT_DIR/../.." && pwd)
CONFIG_DIR="$PROJECT_ROOT/config/local"
ENV_FILE="$CONFIG_DIR/codex-host-bridge.env"
WECOM_ENV="$CONFIG_DIR/wecom.env"
RUNTIME_DIR="$PROJECT_ROOT/work/codex-host-bridge/runtime"
LOG_DIR="$RUNTIME_DIR/logs"
PLIST="$HOME/Library/LaunchAgents/com.zhct.codex-host-bridge.plist"
NODE_BIN=$(command -v node)
CODEX_BIN=$(command -v codex)

mkdir -p "$CONFIG_DIR" "$LOG_DIR" "$HOME/Library/LaunchAgents"
chmod 700 "$CONFIG_DIR"

if [ ! -f "$ENV_FILE" ]; then
  TOKEN=$(openssl rand -hex 32)
  umask 077
  cat >"$ENV_FILE" <<EOF
CODEX_HOST_BRIDGE_HOST=127.0.0.1
CODEX_HOST_BRIDGE_PORT=8790
CODEX_HOST_BRIDGE_ACCESS_TOKEN=$TOKEN
CODEX_HOST_BRIDGE_CODEX_BIN=$CODEX_BIN
CODEX_HOST_BRIDGE_WORKDIR=$PROJECT_ROOT
CODEX_HOST_BRIDGE_MODEL=gpt-5.6-sol
CODEX_HOST_BRIDGE_REASONING_EFFORT=low
CODEX_HOST_BRIDGE_SERVICE_TIER=fast
CODEX_HOST_BRIDGE_TIMEOUT_MS=600000
EOF
else
  TOKEN=$(sed -n 's/^CODEX_HOST_BRIDGE_ACCESS_TOKEN=//p' "$ENV_FILE" | tail -1)
fi

if [ "${#TOKEN}" -lt 32 ]; then
  echo "Invalid host bridge token in $ENV_FILE" >&2
  exit 1
fi

touch "$WECOM_ENV"
chmod 600 "$ENV_FILE" "$WECOM_ENV"
TMP_ENV="$WECOM_ENV.$$.tmp"
awk '!/^WECOM_AIBOT_HOST_CODEX_URL=/ && !/^WECOM_AIBOT_HOST_CODEX_TOKEN=/' "$WECOM_ENV" >"$TMP_ENV"
{
  printf '\nWECOM_AIBOT_HOST_CODEX_URL=http://host.docker.internal:8790/v1/chat\n'
  printf 'WECOM_AIBOT_HOST_CODEX_TOKEN=%s\n' "$TOKEN"
} >>"$TMP_ENV"
mv "$TMP_ENV" "$WECOM_ENV"
chmod 600 "$WECOM_ENV"

cat >"$PLIST" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>com.zhct.codex-host-bridge</string>
  <key>ProgramArguments</key>
  <array>
    <string>$NODE_BIN</string>
    <string>$SCRIPT_DIR/server.js</string>
  </array>
  <key>WorkingDirectory</key><string>$PROJECT_ROOT</string>
  <key>EnvironmentVariables</key>
  <dict>
    <key>PATH</key><string>$SCRIPT_DIR/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    <key>CODEX_HOST_BRIDGE_ENV_FILE</key><string>$ENV_FILE</string>
  </dict>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><true/>
  <key>StandardOutPath</key><string>$LOG_DIR/stdout.log</string>
  <key>StandardErrorPath</key><string>$LOG_DIR/stderr.log</string>
</dict>
</plist>
EOF

chmod +x "$SCRIPT_DIR/bin/zhct-readonly-query"
plutil -lint "$PLIST" >/dev/null
launchctl bootout "gui/$(id -u)/com.zhct.codex-host-bridge" >/dev/null 2>&1 || true
launchctl bootstrap "gui/$(id -u)" "$PLIST"
launchctl kickstart -k "gui/$(id -u)/com.zhct.codex-host-bridge"

i=0
while [ "$i" -lt 20 ]; do
  if curl -fsS http://127.0.0.1:8790/health >/dev/null; then
    echo "Codex host bridge is running on 127.0.0.1:8790"
    exit 0
  fi
  i=$((i + 1))
  sleep 1
done

echo "Codex host bridge did not become healthy; inspect $LOG_DIR/stderr.log" >&2
exit 1
