#!/usr/bin/env bash
set -Eeuo pipefail

REPO="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd -P)"
OUT="$REPO/dist/native/chatgpt-computer-wayland-helper"
SRC="$REPO/native/wayland-helper.c"
SYSROOT="${CHATGPT_COMPUTER_MCP_NATIVE_SYSROOT:-}"
if [[ -z "$SYSROOT" && -d "$REPO/.native-sysroot/usr/include" ]]; then
  SYSROOT="$REPO/.native-sysroot"
fi
CC_BIN="${CC:-cc}"

mkdir -p "$(dirname "$OUT")"

COMMON=(
  -std=gnu17
  -Wall
  -Wextra
  -Werror
  -O2
)

if [[ -n "$SYSROOT" ]]; then
  [[ -d "$SYSROOT/usr/include" ]] || { echo "Invalid CHATGPT_COMPUTER_MCP_NATIVE_SYSROOT: $SYSROOT" >&2; exit 1; }
  multiarch="$($CC_BIN -print-multiarch)"
  hostlib="/usr/lib/$multiarch"
  [[ -r "$hostlib/libei.so.1" && -r "$hostlib/libpipewire-0.3.so.0" ]] \
    || { echo "Native sysroot mode requires matching libei/PipeWire runtime libraries on the host." >&2; exit 1; }
  "$CC_BIN" "${COMMON[@]}" \
    -I"$SYSROOT/usr/include/libei-1.0" \
    -I"$SYSROOT/usr/include/pipewire-0.3" \
    -I"$SYSROOT/usr/include/spa-0.2" \
    -I"$SYSROOT/usr/include/glib-2.0" \
    -I"$SYSROOT/usr/lib/$multiarch/glib-2.0/include" \
    -I"$SYSROOT/usr/include/gio-unix-2.0" \
    -I"$SYSROOT/usr/include" \
    "$SRC" -o "$OUT" \
    "$hostlib/libei.so.1" \
    "$hostlib/libpipewire-0.3.so.0" \
    "$hostlib/libgio-2.0.so.0" \
    "$hostlib/libgobject-2.0.so.0" \
    "$hostlib/libglib-2.0.so.0" \
    "$hostlib/libpng16.so.16" \
    "$hostlib/libxkbcommon.so.0" \
    -ldl -lm -pthread
else
  required=(gio-unix-2.0 libei-1.0 libpipewire-0.3 libpng xkbcommon)
  missing=()
  for module in "${required[@]}"; do
    pkg-config --exists "$module" 2>/dev/null || missing+=("$module")
  done
  if ((${#missing[@]})); then
    cat >&2 <<MSG
Missing native Wayland development packages (${missing[*]}).
On Debian/Ubuntu install:
  build-essential pkg-config libei-dev libpipewire-0.3-dev libspa-0.2-dev libglib2.0-dev libpng-dev libxkbcommon-dev
MSG
    exit 1
  fi
  read -r -a cflags <<<"$(pkg-config --cflags "${required[@]}")"
  read -r -a libs <<<"$(pkg-config --libs "${required[@]}")"
  "$CC_BIN" "${COMMON[@]}" "${cflags[@]}" "$SRC" -o "$OUT" "${libs[@]}" -ldl -lm -pthread
fi

chmod 0755 "$OUT"
hello="$(printf 'QUIT\n' | "$OUT" | head -n1)"
[[ "$hello" == $'HELLO\t1' ]] || { echo "Wayland helper handshake check failed." >&2; exit 1; }
echo "Wayland helper: PASS ($OUT)"
