#!/system/bin/sh

BASE_DIR=/data/local/termux-wake-keeper
LOG=$BASE_DIR/termux-wake-keeper.log
RUN_DIR=/dev/.termux-wake-keeper
PIDFILE=$RUN_DIR/termux-wake-keeper.pid
INTERVAL=60

mkdir -p "$BASE_DIR" "$RUN_DIR"

log() {
  echo "[$(date '+%F %T')] $*" >> "$LOG"
}

find_termux_command() {
  name=$1
  for package in com.termux com.zerotermux com.termux.zero; do
    path=/data/data/$package/files/usr/bin/$name
    if [ -x "$path" ]; then
      echo "$path"
      return 0
    fi
  done
  return 1
}

if [ -f "$PIDFILE" ]; then
  old_pid=$(cat "$PIDFILE" 2>/dev/null)
  if [ -n "$old_pid" ] && [ -r "/proc/$old_pid/cmdline" ] && \
     tr '\0' ' ' < "/proc/$old_pid/cmdline" | grep -q 'termux-wake-keeper.sh'; then
    log "already running, pid=$old_pid"
    exit 0
  fi
fi

echo $$ > "$PIDFILE"
WAKE_LOCK_CMD=$(find_termux_command termux-wake-lock)
WAKE_UNLOCK_CMD=$(find_termux_command termux-wake-unlock)

if [ -z "$WAKE_LOCK_CMD" ]; then
  log "termux-wake-lock not found"
  rm -f "$PIDFILE"
  exit 1
fi

release_lock() {
  [ -n "$WAKE_UNLOCK_CMD" ] && "$WAKE_UNLOCK_CMD" >> "$LOG" 2>&1
  rm -f "$PIDFILE"
}

trap 'release_lock; exit 0' INT TERM

while true; do
  "$WAKE_LOCK_CMD" >> "$LOG" 2>&1
  sleep "$INTERVAL"
done
