#!/usr/bin/env bash
#
# disk-monitor.sh — Check disk usage and alert when above threshold.
#
# Usage:
#   disk-monitor.sh                          # print usage, warn at 80%
#   disk-monitor.sh --warn-percent 90        # custom threshold
#
# Requires GNU coreutils df (standard on Debian). Uses --output for
# deterministic column ordering regardless of locale.
#
# Exit code 0 if under threshold, 1 if at or above.

set -euo pipefail

WARN_PERCENT=80

while [[ $# -gt 0 ]]; do
  case "$1" in
    --warn-percent)
      WARN_PERCENT="$2"
      shift 2
      ;;
    *)
      echo "Unknown argument: $1" >&2
      exit 2
      ;;
  esac
done

GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

EXIT_CODE=0

# Partitions to check: install root and /var (Docker data-root is often here)
PARTITIONS="${PARTITIONS:-/ /var}"

for partition in $PARTITIONS; do
  if [[ ! -d "$partition" ]]; then
    continue
  fi
  # GNU df --output columns: pcent (Use%), size, avail, target (Mounted on)
  read -r USAGE_PCT SIZE AVAIL MOUNT <<< "$(df -h --output=pcent,size,avail,target "$partition" | awk 'NR==2 {gsub(/%/,"",$1); print $1, $2, $3, $4}')"

  if [[ -z "${USAGE_PCT:-}" || ! "${USAGE_PCT:-}" =~ ^[0-9]+$ ]]; then
    echo "  [skip] Could not read usage for ${partition}"
    continue
  fi

  if [[ "$USAGE_PCT" -ge "$WARN_PERCENT" ]]; then
    echo -e "  ${RED}WARN${NC} ${MOUNT}: ${USAGE_PCT}% used (${AVAIL} avail of ${SIZE}) — threshold ${WARN_PERCENT}%"
    EXIT_CODE=1
  elif [[ "$USAGE_PCT" -ge $((WARN_PERCENT - 10)) ]]; then
    echo -e "  ${YELLOW}NOTE${NC} ${MOUNT}: ${USAGE_PCT}% used (${AVAIL} avail of ${SIZE}) — approaching threshold"
  else
    echo -e "  ${GREEN}OK${NC}   ${MOUNT}: ${USAGE_PCT}% used (${AVAIL} avail of ${SIZE})"
  fi
done

exit "$EXIT_CODE"
