#!/system/bin/sh

TERMUX_PACKAGE=com.termux
PREFIX=/data/data/$TERMUX_PACKAGE/files/usr
HOME_DIR=/data/data/$TERMUX_PACKAGE/files/home
LOG=/data/local/termux-sshd-boot.log

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

termux_sshd_running() {
  for proc_dir in /proc/[0-9]*; do
    exe=$(readlink "$proc_dir/exe" 2>/dev/null)
    [ "$exe" = "$PREFIX/bin/sshd" ] && return 0
  done
  return 1
}

log "boot script run"

i=0
while [ "$i" -lt 60 ]; do
  sleep 30
  i=$((i + 1))

  if termux_sshd_running; then
    log "sshd running (check $i)"
    exit 0
  fi

  TERMUX_UID=$(stat -c '%u' "/data/data/$TERMUX_PACKAGE" 2>/dev/null)
  if [ -z "$TERMUX_UID" ] || [ ! -x "$PREFIX/bin/sshd" ]; then
    log "Termux credential storage unavailable (check $i)"
    continue
  fi

  log "sshd not up (check $i), trying to start"
  su "$TERMUX_UID" -c "HOME=$HOME_DIR PATH=$PREFIX/bin:\$PATH nohup $PREFIX/bin/sshd >/dev/null 2>&1 &"
  sleep 3

  if termux_sshd_running; then
    log "sshd started (check $i)"
    exit 0
  fi
done

log "sshd never came up after 60 tries"
exit 0
