#!/usr/bin/env bash
set -u

echo "SafeDisk AI read-only Mac storage scan"
echo "This scan records paths, sizes, and tool metadata only."
echo "It does not inspect file contents and does not delete anything."
echo

timestamp="$(date +%Y%m%d-%H%M%S)"
out_dir="$HOME/Desktop"
report="$out_dir/mac-storage-scan-$timestamp.txt"

section() {
  printf '\n## %s\n' "$1" | tee -a "$report" >/dev/null
}

size_of() {
  path="$1"
  label="$2"
  if [ -e "$path" ]; then
    du -sh "$path" 2>/dev/null | awk -v label="$label" '{size=$1; $1=""; sub(/^[ \t]+/, ""); print size "\t" label "\t" $0}' | tee -a "$report" >/dev/null
  else
    printf "missing\t%s\t%s\n" "$label" "$path" | tee -a "$report" >/dev/null
  fi
}

{
  echo "# SafeDisk AI Mac Storage Scan"
  echo "Generated: $(date)"
  echo "Host: $(hostname)"
  echo
  echo "This report is read-only. It does not inspect file contents and does not delete anything."
} > "$report"

section "Disk Overview"
df -h / | tee -a "$report" >/dev/null

section "Home Folder Top-Level Sizes"
du -sh "$HOME"/* "$HOME"/.[!.]* 2>/dev/null | sort -hr | head -40 | tee -a "$report" >/dev/null

section "Common Developer Storage"
size_of "$HOME/Library/Developer/Xcode/DerivedData" "Xcode DerivedData"
size_of "$HOME/Library/Developer/Xcode/Archives" "Xcode Archives"
size_of "$HOME/Library/Developer/CoreSimulator" "iOS Simulators"
size_of "$HOME/Library/Caches" "User Library Caches"
size_of "$HOME/Library/Application Support/Code" "VS Code Application Support"
size_of "$HOME/Library/Application Support/Cursor" "Cursor Application Support"
size_of "$HOME/Library/Application Support/Claude" "Claude Application Support"
size_of "$HOME/Library/Application Support/Claude/vm_bundles" "Claude VM bundles"
size_of "$HOME/.claude" "Claude Code home"
size_of "$HOME/.codex" "Codex home"
size_of "$HOME/.gemini" "Gemini CLI home"
size_of "$HOME/.npm" "npm cache/home"
size_of "$HOME/.pnpm-store" "pnpm store"
size_of "$HOME/.yarn" "yarn home"
size_of "$HOME/Library/Caches/Homebrew" "Homebrew cache"
size_of "$HOME/Library/Containers/com.docker.docker/Data" "Docker Desktop data"
size_of "$HOME/.orbstack" "OrbStack data"
size_of "$HOME/OrbStack" "OrbStack home"
size_of "$HOME/Library/Application Support/rancher-desktop" "Rancher Desktop data"
size_of "$HOME/Downloads" "Downloads"
size_of "$HOME/Desktop" "Desktop"

section "Large Files In Home"
find "$HOME" -xdev -type f -size +500M -print0 2>/dev/null |
  xargs -0 du -sh 2>/dev/null |
  sort -hr |
  head -80 |
  tee -a "$report" >/dev/null

section "Large node_modules Folders"
find "$HOME" -xdev -type d -name node_modules -prune -print0 2>/dev/null |
  xargs -0 du -sh 2>/dev/null |
  sort -hr |
  head -40 |
  tee -a "$report" >/dev/null

section "Docker"
if command -v docker >/dev/null 2>&1; then
  docker system df 2>/dev/null | tee -a "$report" >/dev/null || true
  docker builder du 2>/dev/null | tail -60 | tee -a "$report" >/dev/null || true
else
  echo "docker not found" | tee -a "$report" >/dev/null
fi

section "Homebrew"
if command -v brew >/dev/null 2>&1; then
  brew cleanup -n 2>/dev/null | tail -40 | tee -a "$report" >/dev/null || true
else
  echo "brew not found" | tee -a "$report" >/dev/null
fi

section "Next Step"
{
  echo "Preview this report locally: https://site-iota-ebon-80.vercel.app/post-scan.html?utm_source=scan-report&utm_medium=local-report&utm_campaign=post-scan"
  echo "Free preview: shows biggest buckets, up to 3 starter cleanup steps, and remaining space."
  echo "Full cleanup plan ($29): https://site-iota-ebon-80.vercel.app/checkout.html?product=pilot_audit&utm_source=scan-report&utm_medium=local-report&utm_campaign=post-scan"
  echo "Team / CI policy ($99): https://site-iota-ebon-80.vercel.app/checkout.html?product=team_pilot&utm_source=scan-report&utm_medium=local-report&utm_campaign=post-scan"
} | tee -a "$report" >/dev/null

echo
echo "Done. Report written to:"
echo "$report"
echo
echo "Preview this txt file locally for the free starter cleanup:"
echo "https://site-iota-ebon-80.vercel.app/post-scan.html?utm_source=scan-command&utm_medium=download&utm_campaign=post-scan"
echo
echo "For team Docker, OrbStack, Xcode, or AI-agent storage incidents:"
echo "https://site-iota-ebon-80.vercel.app/checkout.html?product=team_pilot&utm_source=scan-report&utm_medium=local-report&utm_campaign=post-scan"

if command -v open >/dev/null 2>&1; then
  open -R "$report" >/dev/null 2>&1 || true
  open "https://site-iota-ebon-80.vercel.app/post-scan.html?utm_source=scan-command&utm_medium=download&utm_campaign=post-scan" >/dev/null 2>&1 || true
fi

echo
read -r -p "Press Enter to close this window."
