#!/bin/bash
# PolyMind 桌面端启动器。
#
# 自包含形态下前端不再是一个 HTTP 服务，而是一个 Electron 应用：
#   app://polymind/        由主进程的协议处理器服务于 app/renderer/
#   app://polymind/api/*   由主进程反向代理到 POLYMIND_DESKTOP_API_TARGET
# 所以这里既不需要拉起 nginx，也不需要拉起 Next，只需要后端在跑。
set -u

APP_DIR=/opt/polymind/desktop/app
RUNTIME=/opt/polymind/desktop/runtime

# 运行时配置：POLYMIND_* 前缀的变量会被注入到页面的 window.__APP_CONFIG__，
# 改完重启本程序即可生效，不需要重新构建前端产物。
if [ -r /etc/polymind/polymind.env ]; then
    set -a
    # shellcheck disable=SC1091
    . /etc/polymind/polymind.env
    set +a
fi

# ── 令牌与后端对齐 ──────────────────────────────────────────────────────────
# 桌面端把令牌注入页面、后端用它校验，而两边各有一份配置：
#   /etc/polymind/polymind.env          POLYMIND_AUTH_TOKEN
#   /etc/witty-service/witty-service.env AUTH_TOKEN
# 两份配置一旦不一致，现象是"页面能打开、所有接口 401"，很难定位。所以以**后端为准**
# 对齐一次：后端那份配置里能解析出非空 AUTH_TOKEN 时，就用它覆盖页面里的令牌。
# 这里只用 sed 取值、绝不 source —— 那是另一个包的文件，没有理由执行它的内容。
export POLYMIND_AUTH_TOKEN="${POLYMIND_AUTH_TOKEN:-dev-token}"
backend_env=/etc/witty-service/witty-service.env
if [ -r "$backend_env" ]; then
    backend_token=$(sed -n 's/^[[:space:]]*AUTH_TOKEN[[:space:]]*=[[:space:]]*//p' "$backend_env" \
        | tail -n 1 | tr -d '\042\047' | tr -d '[:space:]')
    if [ -n "$backend_token" ]; then
        if [ -n "${POLYMIND_AUTH_TOKEN:-}" ] && [ "$POLYMIND_AUTH_TOKEN" != "$backend_token" ]; then
            echo "polymind: POLYMIND_AUTH_TOKEN 与后端 AUTH_TOKEN 不一致，按后端取值" >&2
        fi
        export POLYMIND_AUTH_TOKEN="$backend_token"
    fi
fi

# 桌面端只有自包含一种形态，无需 POLYMIND_DESKTOP_MODE。
# 想改去加载外部前门可设 POLYMIND_DESKTOP_URL（见 desktop/README.md）。
export POLYMIND_DESKTOP_API_TARGET="${POLYMIND_DESKTOP_API_TARGET:-http://127.0.0.1:8000}"

# 这里**不传** --class。应用主窗口的 WM_CLASS 只由 desktop/package.json 的 name 决定，
# 在本包上实测（Xvfb + 直接遍历 X 窗口读 XGetClassHint）主窗口是
# res_name/res_class = polymind-desktop；而 --class=PolyMind 只会把 Chromium 那个
# 辅助窗口的 class 改成 PolyMind，主窗口纹丝不动。真正让任务栏图标对上的是桌面项里的
# StartupWMClass=polymind-desktop —— 早先的打包里传了 --class=PolyMind、桌面项也写
# PolyMind，主窗口因此挂不上 polymind.desktop，图标掉回默认。
exec "$RUNTIME/electron" "$APP_DIR" "$@"
