#!/data/data/com.termux/files/usr/bin/bash
set -euo pipefail

STATE="${HOME}/.local/state/sol37-irc-bridge"
PID_FILE="${STATE}/bridge.pid"
LOG_FILE="${STATE}/bridge.log"
mkdir -p "$STATE"

running() {
  [[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null
}

start_bridge() {
  if running; then
    printf 'Bridge is already running (PID %s).\n' "$(cat "$PID_FILE")"
    return
  fi
  command -v termux-wake-lock >/dev/null 2>&1 && termux-wake-lock || true
  nohup cloudflared access tcp \
    --hostname irc.system42.one \
    --url 127.0.0.1:16667 \
    --loglevel info >>"$LOG_FILE" 2>&1 &
  printf '%s\n' "$!" >"$PID_FILE"
  sleep 1
  if ! running; then
    printf 'Bridge failed to start. Review %s.\n' "$LOG_FILE" >&2
    exit 1
  fi
  printf 'Bridge started at 127.0.0.1:16667 (PID %s).\n' "$(cat "$PID_FILE")"
}

stop_bridge() {
  if running; then
    kill "$(cat "$PID_FILE")"
    rm -f "$PID_FILE"
    command -v termux-wake-unlock >/dev/null 2>&1 && termux-wake-unlock || true
    printf 'Bridge stopped.\n'
  else
    rm -f "$PID_FILE"
    printf 'Bridge is not running.\n'
  fi
}

case "${1:-status}" in
  start) start_bridge ;;
  stop) stop_bridge ;;
  restart) stop_bridge; start_bridge ;;
  status)
    if running; then
      printf 'RUNNING - PID %s, local endpoint 127.0.0.1:16667\n' "$(cat "$PID_FILE")"
    else
      printf 'STOPPED - local endpoint 127.0.0.1:16667\n'
    fi
    ;;
  logs) tail -n 100 "$LOG_FILE" ;;
  uninstall)
    stop_bridge
    rm -f "${HOME}/.local/bin/sol37-irc-bridge-android"
    rm -rf "$STATE"
    printf 'Sol-37 IRC Bridge removed. The Termux cloudflared package was retained.\n'
    ;;
  *)
    printf 'Usage: sol37-irc-bridge-android {start|stop|restart|status|logs|uninstall}\n' >&2
    exit 2
    ;;
esac
