#!/usr/bin/env bash
# KateRTX CLI · project-only · SPV loader is the one lulz
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
export KATERTX_ROOT="$ROOT"
export DISPLAY="${DISPLAY:-:0}"

cmd="${1:-help}"
shift || true

case "$cmd" in
  help|-h|--help)
    cat <<EOF
KateRTX · SPV loader/runner + ELF · zero host install

  ./bin/kate-rtx build           build all ELFs + compute SPVs
  ./bin/kate-rtx one | lulz      ONE LULZ · SPV runner (engine + grin)
  ./bin/kate-rtx spv […]         SPV loader console (krtx-spv ELF)
  ./bin/kate-rtx in <id>         load+run plug (js or compute)
  ./bin/kate-rtx list            catalog js+comp plugs
  ./bin/kate-rtx engine|rtx      fullscreen krtx-engine ELF
  ./bin/kate-rtx term            classic krtx-term ELF
  ./bin/kate-rtx launch          = one lulz
  ./bin/kate-rtx kate            Kate · XDG inside KateRTX only
  ./bin/kate-rtx compile [f]     JS SPV compile
  ./bin/kate-rtx mail|santa      Santa SPV hotswap (krtx-mail removed)
  ./bin/kate-rtx status | test

ELFs: krtx-engine · krtx-spv(=krtx) · krtx-term
Mail: krtx-spv in santa · ~/Projects/Santa/bin/santa · Titan SSL
SPV is the loader/runner for plugs · free never folds
EOF
    ;;
  build)
    exec bash "$ROOT/build.sh"
    ;;
  one|lulz|go|launch|composite)
    exec "$ROOT/bin/krtx-spv" one
    ;;
  spv|loader|runner)
    exec "$ROOT/bin/krtx-spv" "$@"
    ;;
  in|run)
    [[ -n "${1:-}" ]] || { echo "in <plug-id>"; exit 2; }
    exec "$ROOT/bin/krtx-spv" in "$1"
    ;;
  list|ls)
    exec "$ROOT/bin/krtx-spv" list
    ;;
  engine|rtx|gfx|fullscreen)
    exec "$ROOT/bin/launch-rtx"
    ;;
  term|console)
    exec "$ROOT/bin/launch-term"
    ;;
  mail|email|proton|santa)
    # SPV hotswap Santa (krtx-mail removed)
    if [[ -x "$ROOT/bin/krtx-spv" ]]; then
      exec "$ROOT/bin/krtx-spv" in santa
    fi
    if [[ -x "${HOME}/Projects/Santa/bin/santa" ]]; then
      exec "${HOME}/Projects/Santa/bin/santa"
    fi
    echo "Santa SPV: krtx-spv in santa · native: ~/Projects/Santa/bin/santa" >&2
    exit 1
    ;;
  kate|edit)
    export XDG_CONFIG_HOME="$ROOT/.config"
    export XDG_DATA_HOME="$ROOT/.local/share"
    mkdir -p "$XDG_CONFIG_HOME/kate/externaltools" \
      "$XDG_DATA_HOME/org.kde.syntax-highlighting/themes"
    if [[ -f "$ROOT/kate/themes/AMOURANTHRTX-Night.theme" ]]; then
      cp -f "$ROOT/kate/themes/AMOURANTHRTX-Night.theme" \
        "$XDG_DATA_HOME/org.kde.syntax-highlighting/themes/"
    fi
    [[ -f "$ROOT/kate/katerc" ]] && cp -f "$ROOT/kate/katerc" "$XDG_CONFIG_HOME/katerc"
    cp -f "$ROOT/kate/externaltools/"*.ini "$XDG_CONFIG_HOME/kate/externaltools/" 2>/dev/null || true
    exec kate "$ROOT/KateRTX.kateproject" \
      "$ROOT/README.txt" \
      "$ROOT/spvs/kate.js" \
      "$ROOT/spvs/term.js" \
      "$ROOT/src/krtx_spv.c" \
      "$ROOT/engine/shaders/atoms.comp"
    ;;
  compile)
    exec bash "$ROOT/bin/js_spv_compile.sh" "${1:-all}"
    ;;
  status)
    echo "KATERTX_ROOT=$ROOT"
    echo -n "krtx-engine: "; file "$ROOT/bin/krtx-engine" 2>/dev/null || echo missing
    echo -n "krtx-spv:    "; file "$ROOT/bin/krtx-spv" 2>/dev/null || echo missing
    echo -n "krtx (lulz): "; file "$ROOT/bin/krtx" 2>/dev/null || echo missing
    echo -n "krtx-term:   "; file "$ROOT/bin/krtx-term" 2>/dev/null || echo missing
    echo "spvs js: $(ls "$ROOT/spvs"/*.js 2>/dev/null | wc -l)"
    echo "comp:    $(ls "$ROOT/engine/spvs"/*.comp 2>/dev/null | wc -l)"
    echo "symlinks: $(find "$ROOT" -type l 2>/dev/null | wc -l)"
    ;;
  test)
    echo "=== KateRTX test · ELF + SPV loader ==="
    test -x "$ROOT/bin/krtx-engine" || { echo FAIL no krtx-engine; exit 1; }
    test -x "$ROOT/bin/krtx-spv" || { echo FAIL no krtx-spv; exit 1; }
    test -x "$ROOT/bin/krtx" || { echo FAIL no krtx; exit 1; }
    file "$ROOT/bin/krtx-engine" | grep -q ELF || { echo FAIL engine not ELF; exit 1; }
    file "$ROOT/bin/krtx-spv" | grep -q ELF || { echo FAIL spv not ELF; exit 1; }
    if find "$ROOT" -type l | grep -q .; then
      echo "FAIL symlinks:"; find "$ROOT" -type l; exit 1
    fi
    echo "OK ELFs · no symlinks"
    n=$("$ROOT/bin/krtx-spv" list 2>/dev/null | wc -l)
    echo "SPV catalog=$n"
    [[ "$n" -gt 10 ]] || { echo FAIL catalog thin; exit 1; }
    bash "$ROOT/bin/js_spv_compile.sh" all | tail -3
    echo "=== TEST PASS · one lulz · SPV is the loader ==="
    ;;
  *)
    echo "unknown: $cmd · kate-rtx help" >&2
    exit 2
    ;;
esac
