#!/bin/sh
# Открывает интерфейс BAG отдельным окном приложения.
# Токен читается из каталога настроек: его создаёт служба bagd при запуске.
set -eu
# Членство в группе bag появляется в сессии только после повторного входа.
# Если пользователь уже в группе по /etc/group, но не в этой сессии —
# перезапускаемся под sg, иначе окно не прочитает токен службы.
if ! id -nG | tr ' ' '\n' | grep -qx bag && getent group bag | grep -qE "[:,]$(id -un)(,|$)"; then
  exec sg bag -c "exec '$0'"
fi
# Токен: сначала системный (служба под systemd), затем пользовательский (sudo bagd).
TOKEN_FILE=""
for f in /etc/bag/ui-token "${XDG_CONFIG_HOME:-$HOME/.config}/bag/ui-token"; do
  [ -r "$f" ] && { TOKEN_FILE="$f"; break; }
done
[ -n "$TOKEN_FILE" ] || { echo "Токен не найден. Запущена ли служба: systemctl status bagd" >&2; exit 1; }
URL="http://127.0.0.1:8777/?token=$(cat "$TOKEN_FILE")"

# 1. Новое окно (Kotlin/Compose, client/): папка со своим рантаймом Java, либо
#    jar на системной Java 17+. BAG_UI=flutter — прежнее Flutter-окно.
for a in /usr/local/lib/bag-app/bin/bag-app "$(dirname "$0")"/../client/desktopApp/build/compose/binaries/main/app/bag-app/bin/bag-app; do
  if [ "${BAG_UI:-kmp}" = kmp ] && [ -x "$a" ]; then
    exec "$a"
  fi
done
KMP_JAR=/usr/local/lib/bag-app/bag-app.jar
for j in "$(dirname "$0")"/../client/desktopApp/build/compose/jars/*.jar; do [ -f "$j" ] && KMP_JAR="$j"; done
# Java должна быть с AWT: у java-*-openjdk-headless окна нет (libawt_xawt.so).
JAVA_OK=0
if command -v java >/dev/null 2>&1; then
  JH=$(java -XshowSettings:properties -version 2>&1 | sed -n 's/^ *java.home = //p')
  [ -n "$JH" ] && [ -f "$JH/lib/libawt_xawt.so" ] && JAVA_OK=1
fi
if [ "${BAG_UI:-kmp}" = kmp ] && [ -f "$KMP_JAR" ] && [ "$JAVA_OK" = 1 ]; then
  # Быстрый старт: архив классов (CDS) создаётся при первом запуске и ускоряет
  # следующие; -XX:TieredStopAtLevel=1 — быстрая компиляция без пиков нагрузки.
  CDS_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/bag"; mkdir -p "$CDS_DIR"
  exec java -Xss4m -XX:+UseSerialGC -Xmx512m -XX:TieredStopAtLevel=1 -Xshare:auto \
    -XX:+AutoCreateSharedArchive -XX:SharedArchiveFile="$CDS_DIR/bag-app.jsa" \
    --add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED --enable-native-access=ALL-UNNAMED \
    -Dskiko.renderApi=OPENGL -Dsun.java2d.opengl=true -jar "$KMP_JAR"
fi

# 2. Прежнее Flutter-окно, если собрано.
APP="$(dirname "$0")/../app/build/linux/x64/release/bundle/bag_app"
[ -x "$APP" ] && exec "$APP"
[ -x /usr/local/lib/bag/bag_app ] && exec /usr/local/lib/bag/bag_app

# 3. Движок Chromium умеет окно без браузерной обвязки.
for b in microsoft-edge chromium chromium-browser google-chrome brave-browser; do
  if command -v "$b" >/dev/null 2>&1; then
    exec "$b" --app="$URL" --window-size=600,780
  fi
done

# 4. Firefox: отдельный профиль в режиме киоска, без вкладок и адресной строки.
if command -v firefox >/dev/null 2>&1; then
  PROFILE="${XDG_DATA_HOME:-$HOME/.local/share}/bag/firefox-profile"
  if [ ! -d "$PROFILE" ]; then
    mkdir -p "$PROFILE"
    cat > "$PROFILE/user.js" <<'PREFS'
// Окно приложения: без панелей, без первого запуска, без обновлений профиля.
user_pref("browser.tabs.inTitlebar", 0);
user_pref("browser.startup.homepage_override.mstone", "ignore");
user_pref("datareporting.policy.dataSubmissionEnabled", false);
user_pref("browser.shell.checkDefaultBrowser", false);
user_pref("browser.aboutwelcome.enabled", false);
PREFS
  fi
  exec firefox --profile "$PROFILE" --kiosk --width 600 --height 780 "$URL"
fi

exec xdg-open "$URL"
