#!/bin/sh
set -e

pkg=staden
export PATH="/usr/share/staden/scripts:/usr/lib/staden/bin:$PATH"


if [ -z "$AUTOPKGTEST_TMP" ]; then
  AUTOPKGTEST_TMP=$(mktemp -d /tmp/${pkg}-test.XXXXXX)
  trap "rm -rf ${AUTOPKGTEST_TMP}" EXIT INT TERM
fi

cp -a "$(dirname "$0")/data/"* "${AUTOPKGTEST_TMP}/"
cd "${AUTOPKGTEST_TMP}"


echo "Running CLI test (fasta-split)..."
fasta-split input.fa
if [ "$(ls -1 seq* 2>/dev/null | wc -l)" -ge 3 ]; then
  echo "fasta-split successful"
else
  echo "fasta-split failed"
  exit 1
fi


pre_test_cleanup() {
  for pname in gap4 pregap4 gap.tcl tclsh Xvfb; do
    pids=$(pgrep -f "$pname") || true
    if [ -n "$pids" ]; then
      echo "Killing leftover $pname processes: $pids"
      for pid in $pids; do
        if kill -0 "$pid" 2>/dev/null; then
          kill "$pid" || echo "Warning: could not kill $pname PID $pid"
        fi
      done
    fi
  done
}


check_n_cleanup() {

  gui_pids=$(ps aux | awk '/[g]ap4|[p]regap4/ {print $2}' | xargs)
  if [ -z "$gui_pids" ]; then
    echo "Error: GUI applications crashed before check"
    exit 1
  fi

  echo "Found GUI processes: $gui_pids"
  for pid in $gui_pids; do
    if kill -0 "$pid" 2>/dev/null; then
      kill "$pid" || {
        echo "Error: Failed to kill GUI process $pid"
        exit 1
      }
    fi
  done

  tcl_pids=$(ps aux | awk '/[g]ap.tcl|[t]clsh/ {print $2}' | xargs)
  if [ -n "$tcl_pids" ]; then
    echo "Cleaning up leftover gap.tcl/tclsh: $tcl_pids"
    for pid in $tcl_pids; do
      if kill -0 "$pid" 2>/dev/null; then
        kill "$pid" || echo "Warning: Could not kill tclsh/gap.tcl PID $pid"
      fi
    done
  fi

  xvfb_pids=$(ps aux | awk '/[X]vfb/ {print $2}' | xargs)
  if [ -n "$xvfb_pids" ]; then
    echo "Cleaning up leftover Xvfb: $xvfb_pids"
    for pid in $xvfb_pids; do
      if kill -0 "$pid" 2>/dev/null; then
        kill "$pid" || echo "Warning: Could not kill Xvfb PID $pid"
      fi
    done
  fi
}

pre_test_cleanup

echo "Launching gap4 and pregap4 "
xvfb-run --auto-servernum gap4 > /dev/null 2>&1 &
xvfb-run --auto-servernum pregap4 > /dev/null 2>&1 &

sleep 10
check_n_cleanup
exit 0
