#!/usr/bin/env bash

# Usage: ./stats.sh <folder_prefix>
# Example: ./stats.sh B   # processes ./B*/ directories

if [ -z "$1" ]; then
  echo "Usage: $0 <folder_prefix>"
  exit 1
fi

prefix="$1"

# Find matching top-level dirs safely
mapfile -t dirs < <(find . -maxdepth 1 -type d -name "${prefix}*" -print | sort)

if [ ${#dirs[@]} -eq 0 ]; then
  echo "No directories found starting with '$prefix'"
  exit 0
fi

have_numfmt=1
command -v numfmt >/dev/null 2>&1 || have_numfmt=0

hr() {  # human-readable bytes (uses numfmt if available)
  if [ "$have_numfmt" -eq 1 ]; then
    numfmt --to=iec --suffix=B "$1"
  else
    # Fallback: show raw bytes if numfmt isn't available
    echo "${1}B"
  fi
}

for folder in "${dirs[@]}"; do
  # strip leading ./ for nicer printing
  clean="${folder#./}"

  # count immediate subfolders
  sub_count=$(find "$folder" -mindepth 1 -maxdepth 1 -type d -print | wc -l | awk '{print $1}')

  # average size over immediate subfolders only (integer bytes)
  if [ "$sub_count" -gt 0 ]; then
    avg_bytes=$(
      find "$folder" -mindepth 1 -maxdepth 1 -type d -print0 \
      | xargs -0 du -sb -- 2>/dev/null \
      | awk '{sum+=$1} END {printf "%d", (NR>0 ? sum/NR : 0)}'
    )
  else
    avg_bytes=0
  fi

  # total size of the folder (bytes)
  total_bytes=$(du -sb -- "$folder" | awk '{print $1}')

  echo "Folder: $clean"
  echo "  Subfolder count:        $sub_count"
  echo "  Average subfolder size: $(hr "$avg_bytes")"
  echo "  Total folder size:      $(hr "$total_bytes")"
  echo
done

