#!/usr/bin/env bash
# Read-only disk pressure report. Run as root to reduce permission errors.
set -u

scan_path="${1:-/}"
threshold="${2:-85}"

if [[ ! -d "$scan_path" ]]; then
  printf 'Error: not a directory: %s\n' "$scan_path" >&2
  exit 2
fi

if [[ ! "$threshold" =~ ^[0-9]+$ ]] || (( threshold < 1 || threshold > 100 )); then
  printf 'Error: threshold must be an integer from 1 to 100\n' >&2
  exit 2
fi

printf 'Disk usage report for %s (warning threshold: %s%%)\n\n' "$scan_path" "$threshold"
printf '%-8s %-8s %s\n' 'USED' 'STATUS' 'MOUNT'
df -P -x tmpfs -x devtmpfs "$scan_path" | awk -v limit="$threshold" '
  NR > 1 {
    used = $5
    sub(/%/, "", used)
    status = used >= limit ? "WARNING" : "OK"
    printf "%-8s %-8s %s\n", $5, status, $6
  }
'

printf '\nLargest paths (same filesystem):\n'
du -x -h --max-depth=1 "$scan_path" 2>/dev/null | sort -h -r | head -n 15

printf '\nLargest files (top 15):\n'
find "$scan_path" -xdev -type f -printf '%s\t%p\n' 2>/dev/null |
  sort -n -r |
  head -n 15 |
  awk -F '\t' '{
    split("B KiB MiB GiB TiB", units, " ")
    size = $1
    unit = 1
    while (size >= 1024 && unit < 5) {
      size /= 1024
      unit++
    }
    printf "%8.1f %-3s %s\n", size, units[unit], $2
  }'

if command -v lsof >/dev/null 2>&1; then
  printf '\nDeleted files still held open:\n'
  lsof +L1 2>/dev/null | head -n 25 || true
fi
