#!/usr/bin/env bash
# Generic PC-only CI wrapper: one cross-user queue plus cgroup/nice/IO limits.
set -euo pipefail

if [[ -z "${BUILD_SLOT_WRAPPED:-}" ]]; then
  slot_script="${BUILD_SLOT_SCRIPT:-/usr/local/lib/local-ci/buildslot.sh}"
  [[ -x "$slot_script" ]] || { echo "cross-user build queue unavailable: $slot_script" >&2; exit 73; }
  export BUILD_SLOT_WRAPPED=1 BUILD_SLOTS="${BUILD_SLOTS:-1}" BUILD_SLOT_FIXED="${BUILD_SLOT_FIXED:-1}"
  exec "$slot_script" env BUILD_SLOT_WRAPPED=1 "$0" "$@"
fi

[[ -n "${BUILD_NO_CAP:-}" ]] && exec "$@"
limit="${BUILD_CPU_LIMIT:-2}"
heap="${BUILD_NODE_HEAP:-4096}"
export NODE_OPTIONS="${NODE_OPTIONS:-} --max-old-space-size=${heap}"
export UV_THREADPOOL_SIZE="${UV_THREADPOOL_SIZE:-2}"
export GOMAXPROCS="${BUILD_GOMAXPROCS:-$limit}"
export VITEST_MAX_FORKS="${BUILD_VITEST_MAX_FORKS:-$limit}"
export VITEST_MAX_THREADS="${BUILD_VITEST_MAX_THREADS:-$limit}"

if [[ -z "${TURBO_CACHE_DIR:-}" ]]; then
  common_git_dir=$(git rev-parse --path-format=absolute --git-common-dir 2>/dev/null || true)
  [[ -n "$common_git_dir" ]] && export TURBO_CACHE_DIR="$(dirname "$common_git_dir")/.turbo/cache"
fi

argv=("$@")
if [[ "${argv[0]##*/}" == turbo && "${argv[1]:-}" == run ]] && [[ " ${argv[*]} " != *" --concurrency="* ]]; then
  argv+=("--concurrency=$limit")
fi

cmd=()
if command -v systemd-run >/dev/null && systemctl --user show-environment >/dev/null 2>&1; then
  cmd+=(systemd-run --user --scope --quiet --slice=build.slice -p "CPUQuota=${limit}00%"
    -p "MemoryHigh=${BUILD_MEM_HIGH:-12G}" -p "MemoryMax=${BUILD_MEM_MAX:-16G}" -p CPUWeight=50 -p IOWeight=50)
fi
command -v nice >/dev/null && cmd+=(nice -n 19)
command -v ionice >/dev/null && cmd+=(ionice -c 3)
if [[ "${BUILD_SCHED_IDLE:-1}" != 0 ]] && command -v chrt >/dev/null && chrt --idle 0 true 2>/dev/null; then cmd+=(chrt --idle 0); fi
exec "${cmd[@]}" "${argv[@]}"
