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

# Read-only macOS CI storage scan for SafeDisk AI team pilots.
# It prints paths, sizes, runner metadata, and tool cache summaries. It never deletes files.

timestamp="$(date +%Y%m%d-%H%M%S)"
out_dir="${1:-.}"
mkdir -p "$out_dir"
report="$out_dir/ci-macos-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
}

top_sizes() {
  path="$1"
  label="$2"
  section "$label"
  if [ -d "$path" ]; then
    du -sh "$path"/* "$path"/.[!.]* 2>/dev/null | sort -hr | head -40 | tee -a "$report" >/dev/null
  else
    printf "missing\t%s\n" "$path" | tee -a "$report" >/dev/null
  fi
}

{
  echo "# SafeDisk AI macOS CI Storage Scan"
  echo "Generated: $(date)"
  echo "Host: $(hostname)"
  echo "User: $(whoami)"
  echo "PWD: $(pwd)"
  echo "GITHUB_ACTIONS: ${GITHUB_ACTIONS:-}"
  echo "RUNNER_OS: ${RUNNER_OS:-}"
  echo "RUNNER_ARCH: ${RUNNER_ARCH:-}"
  echo "RUNNER_NAME: ${RUNNER_NAME:-}"
  echo "ImageOS: ${ImageOS:-}"
  echo "ImageVersion: ${ImageVersion:-}"
  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 "Runner Environment Paths"
printf "HOME\t%s\n" "${HOME:-}" | tee -a "$report" >/dev/null
printf "GITHUB_WORKSPACE\t%s\n" "${GITHUB_WORKSPACE:-}" | tee -a "$report" >/dev/null
printf "RUNNER_TEMP\t%s\n" "${RUNNER_TEMP:-}" | tee -a "$report" >/dev/null
printf "RUNNER_TOOL_CACHE\t%s\n" "${RUNNER_TOOL_CACHE:-}" | tee -a "$report" >/dev/null

section "Xcode"
if command -v xcodebuild >/dev/null 2>&1; then
  xcodebuild -version 2>/dev/null | tee -a "$report" >/dev/null || true
  xcode-select -p 2>/dev/null | sed 's/^/xcode-select\t/' | tee -a "$report" >/dev/null || true
else
  echo "xcodebuild not found" | tee -a "$report" >/dev/null
fi

section "Common macOS CI Storage"
size_of "${GITHUB_WORKSPACE:-$PWD}" "GitHub workspace"
size_of "${RUNNER_TEMP:-/tmp}" "Runner temp"
size_of "${RUNNER_TOOL_CACHE:-/opt/hostedtoolcache}" "Runner tool cache"
size_of "$HOME/Library/Developer/Xcode/DerivedData" "Xcode DerivedData"
size_of "$HOME/Library/Developer/Xcode/Archives" "Xcode Archives"
size_of "$HOME/Library/Developer/Xcode/iOS DeviceSupport" "Xcode iOS DeviceSupport"
size_of "$HOME/Library/Developer/CoreSimulator" "CoreSimulator"
size_of "$HOME/Library/Caches" "User Library Caches"
size_of "$HOME/Library/Caches/org.swift.swiftpm" "SwiftPM cache"
size_of "$HOME/Library/Caches/CocoaPods" "CocoaPods cache"
size_of "$HOME/.npm" "npm cache"
size_of "$HOME/.pnpm-store" "pnpm store"
size_of "$HOME/.gradle" "Gradle cache"
size_of "$HOME/Library/Caches/Homebrew" "Homebrew cache"

top_sizes "${GITHUB_WORKSPACE:-$PWD}" "Workspace Top-Level Sizes"
top_sizes "$HOME/Library/Developer" "Developer Folder Top-Level Sizes"

section "Simulator Runtimes"
if command -v xcrun >/dev/null 2>&1; then
  xcrun simctl list runtimes 2>/dev/null | tee -a "$report" >/dev/null || true
  xcrun simctl list devices unavailable 2>/dev/null | head -80 | tee -a "$report" >/dev/null || true
else
  echo "xcrun not found" | tee -a "$report" >/dev/null
fi

section "Dependency Tool Caches"
if command -v brew >/dev/null 2>&1; then
  brew cleanup -n 2>/dev/null | tail -60 | tee -a "$report" >/dev/null || true
else
  echo "brew not found" | tee -a "$report" >/dev/null
fi
if command -v npm >/dev/null 2>&1; then
  npm cache verify 2>/dev/null | tail -40 | tee -a "$report" >/dev/null || true
else
  echo "npm not found" | tee -a "$report" >/dev/null
fi

section "Large Files In Workspace"
find "${GITHUB_WORKSPACE:-$PWD}" -xdev -type f -size +200M -print0 2>/dev/null |
  xargs -0 du -sh 2>/dev/null |
  sort -hr |
  head -80 |
  tee -a "$report" >/dev/null

section "Next Step"
{
  echo "Preview this CI report locally: https://site-xi-orcin-50.vercel.app/ci-macos-storage-scan.html#preview"
  echo "Request a $99 team storage pilot: https://site-xi-orcin-50.vercel.app/checkout.html?product=team_pilot&utm_source=ci-scan-report&utm_medium=local-report&utm_campaign=post-ci-scan"
  echo "Team pilot sample: https://site-xi-orcin-50.vercel.app/sample-team-pilot.html?utm_source=ci-scan-report&utm_medium=local-report&utm_campaign=post-ci-scan"
} | tee -a "$report" >/dev/null

echo "Report written to: $report"
