#!/bin/bash
# 飞鸽传书 Linux 启动器（随 ARM deb 安装到 /usr/local/bin/feige；亦可被其它架构复用）
# 与 trunk/main.cpp 分层 hygiene 对齐；用户安装后点图标即可，无需手工命令。

ARCH="$(uname -m 2>/dev/null || echo unknown)"

apply_xcb() {
  export QT_QPA_PLATFORM=xcb
  unset WAYLAND_DISPLAY
  # 清易诱导 Wayland QPA 的残留（保留系统 XDG_RUNTIME_DIR）
  unset QT_WAYLAND_SHELL_INTEGRATION
  unset QT_WAYLAND_FORCE_DPI
  unset QT_WAYLAND_DISABLE_WINDOWDECORATION
  unset QT_WAYLAND_RECONNECT
  if [ "${XDG_SESSION_TYPE}" = "wayland" ]; then
    export XDG_SESSION_TYPE=x11
  fi
}

apply_soft_gl() {
  export QT_OPENGL=software
  export LIBGL_ALWAYS_SOFTWARE=1
  export QT_XCB_GL_INTEGRATION=none
}

is_wayland_session() {
  [ "${XDG_SESSION_TYPE}" = "wayland" ] && return 0
  case "${QT_QPA_PLATFORM}" in
    *wayland*) return 0 ;;
  esac
  [ -n "${WAYLAND_DISPLAY}" ] && return 0
  return 1
}

is_uos_like() {
  [ -r /etc/os-release ] || return 1
  grep -qiE 'uos|deepin|uniontech|kylin' /etc/os-release 2>/dev/null
}

maybe_private_xdg() {
  if [ "${FEIGE_PRIVATE_XDG_RUNTIME}" = "1" ] || [ "${FEIGE_PRIVATE_XDG_RUNTIME}" = "true" ]; then
    export XDG_RUNTIME_DIR="/tmp/runtime-feige-$(id -u)"
    mkdir -p "$XDG_RUNTIME_DIR"
    chmod 700 "$XDG_RUNTIME_DIR" 2>/dev/null || true
  fi
}

case "$ARCH" in
  aarch64|arm64|armv7l|armv7*|armv8*)
    # 海思 Kirin 等：全量强制 xcb + 软 GL（会话常注入 wayland）
    apply_xcb
    apply_soft_gl
    maybe_private_xdg
    ;;
  loongarch64|loongarch*|mips64|mips64el|mips*)
    # 龙芯 / MIPS：纯 X11 默认硬件 GL（解卡）；Wayland 或 FEIGE_SOFT_GL=1 才软渲染
    if [ "${FEIGE_SOFT_GL}" = "1" ] || [ "${FEIGE_SOFT_GL}" = "true" ]; then
      apply_soft_gl
    fi
    if is_wayland_session; then
      apply_xcb
      apply_soft_gl
    fi
    maybe_private_xdg
    ;;
  sw_64|sw64|riscv64|riscv*)
    # 申威 / RISC-V：统信麒麟默认软 GL；Wayland 切 xcb
    if is_uos_like; then
      apply_soft_gl
    fi
    if is_wayland_session; then
      apply_xcb
      apply_soft_gl
    fi
    maybe_private_xdg
    ;;
  x86_64|amd64|i386|i686)
    # x86：仅统信/麒麟 + Wayland 时切 xcb；统信麒麟默认软 GL 更稳
    if is_uos_like; then
      apply_soft_gl
      if is_wayland_session; then
        apply_xcb
      fi
    elif is_wayland_session; then
      apply_xcb
    fi
    maybe_private_xdg
    ;;
  *)
    if is_wayland_session; then
      apply_xcb
      apply_soft_gl
    fi
    maybe_private_xdg
    ;;
esac

# 日志固定目录 + 启动器 stamp（确认点图标走了本脚本）
LOG_DIR="${HOME}/.local/share/feige"
LOG_FILE="${LOG_DIR}/feige-logs.txt"
if [ -n "${HOME}" ]; then
  mkdir -p "${LOG_DIR}" 2>/dev/null || true
  {
    echo "=== feige-launcher stamp ==="
    echo "time=$(date '+%Y-%m-%d %H:%M:%S' 2>/dev/null || echo unknown)"
    echo "arch=${ARCH}"
    echo "QT_QPA_PLATFORM=${QT_QPA_PLATFORM}"
    echo "WAYLAND_DISPLAY=${WAYLAND_DISPLAY}"
    echo "XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR}"
    echo "XDG_SESSION_TYPE=${XDG_SESSION_TYPE}"
    echo "QT_XCB_GL_INTEGRATION=${QT_XCB_GL_INTEGRATION}"
    echo "QT_OPENGL=${QT_OPENGL}"
  } >> "${LOG_FILE}" 2>/dev/null || true
fi

APPIMAGE="/usr/local/lib/feige/feige.AppImage"
if [ ! -x "$APPIMAGE" ]; then
  if [ -x "/usr/local/bin/feige.bin" ]; then
    APPIMAGE="/usr/local/bin/feige.bin"
  else
    echo "飞鸽传书：找不到程序文件 /usr/local/lib/feige/feige.AppImage" >&2
    exit 1
  fi
fi
exec "$APPIMAGE" "$@"
