#!/usr/bin/env bash
# System-level tuning for Node / Vite / Nx development on a Debian VM:
#   - inotify watches limit (default 8K is too low for monorepos)
#   - hostname (prompt only if generic)
#   - swapfile (4 GB, only if none exists)
set -euo pipefail
# shellcheck source=./lib.sh
source "$(cd "$(dirname "$0")" && pwd)/lib.sh"
require_debian
require_not_root

# 1) inotify watches.
SYSCTL_FILE="/etc/sysctl.d/99-apf-portal.conf"
INOTIFY_LINE="fs.inotify.max_user_watches=524288"
if sudo grep -qxF "$INOTIFY_LINE" "$SYSCTL_FILE" 2>/dev/null; then
  skip "inotify watches already configured in $SYSCTL_FILE."
else
  echo "$INOTIFY_LINE" | sudo tee "$SYSCTL_FILE" >/dev/null
  sudo sysctl --system >/dev/null
  ok "fs.inotify.max_user_watches → 524288."
fi

# 2) Hostname — only prompt if it looks generic.
current_hostname="$(hostname)"
case "$current_hostname" in
  debian|debian13|localhost|trixie|debian12)
    read -r -p "Current hostname '$current_hostname' looks generic. New hostname (blank to keep): " new_hostname
    if [[ -n "$new_hostname" ]]; then
      sudo hostnamectl set-hostname "$new_hostname"
      ok "Hostname set to '$new_hostname'. Will reflect on next login."
    else
      skip "Hostname kept as '$current_hostname'."
    fi
    ;;
  *)
    skip "Hostname '$current_hostname' looks intentional — keeping."
    ;;
esac

# 3) Swap.
if swapon --show | grep -q .; then
  skip "Swap already active: $(swapon --show --noheadings | head -1 | awk '{print $1, $3}')."
else
  if confirm "No swap detected. Add a 4 GB swapfile at /swapfile?"; then
    sudo fallocate -l 4G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    ensure_line_sudo "/swapfile none swap sw 0 0" /etc/fstab
    ok "4 GB swapfile active."
  else
    skip "No swap configured (user choice)."
  fi
fi
