#!/bin/bash

# Безопасная очистка диска — по списку из docs/disk_cleanup/DISK_CLEANUP.md.
# Запрещено удалять: docs/disk_cleanup/DO_NOT_DELETE.md

set -e

echo "🧹 Безопасная очистка диска (см. DO_NOT_DELETE.md)"
echo "=========================================================="
echo ""

cleanup_dir() {
    local dir="$1"
    local name="$2"
    if [ -d "$dir" ] || [ -f "$dir" ]; then
        size=$(du -sh "$dir" 2>/dev/null | cut -f1)
        echo "🗑️  Удаление $name ($size)..."
        rm -rf "$dir" 2>/dev/null && echo "   ✅ $name очищен" || echo "   ⚠️  Не удалось удалить $name"
    else
        echo "   ℹ️  $name не найден, пропускаем"
    fi
}

echo "📊 Текущее состояние диска:"
df -h / | tail -1
echo ""

# 1. Кэши разработки: Colima, npm, node-gyp, TypeScript, pip, .yarn
echo "=== 1. Кэши разработки ==="
cleanup_dir "$HOME/.colima" "Colima кэш"
cleanup_dir "$HOME/Library/Caches/colima" "Colima кэш (Library)"
cleanup_dir "$HOME/.npm" "npm кэш"
cleanup_dir "$HOME/Library/Caches/node-gyp" "node-gyp кэш"
cleanup_dir "$HOME/Library/Caches/typescript" "TypeScript кэш"
cleanup_dir "$HOME/Library/Caches/pip" "pip кэш"
cleanup_dir "$HOME/.yarn" ".yarn кэш"
cleanup_dir "$HOME/Library/Caches/ms-playwright" "Playwright кэш (браузеры для тестов)"
echo ""

# 2. Windsurf полностью (кэш + данные; приложение — удалить вручную из Программы)
echo "=== 2. Windsurf полностью ==="
cleanup_dir "$HOME/.codeium/windsurf" "Codeium/Windsurf кэш"
cleanup_dir "$HOME/.windsurf" "Windsurf данные"
cleanup_dir "$HOME/Library/Application Support/Windsurf" "Windsurf Application Support"
# Если .codeium пуст — можно удалить целиком
[ -d "$HOME/.codeium" ] && [ -z "$(ls -A "$HOME/.codeium" 2>/dev/null)" ] && rm -rf "$HOME/.codeium" && echo "   ✅ .codeium (пустая) удалена"
echo ""

# 3. Кэши браузеров — только Google/Firefox (Brave в DO_NOT_DELETE)
echo "=== 3. Кэши браузеров (не Brave) ==="
cleanup_dir "$HOME/Library/Caches/Google" "Google кэш"
cleanup_dir "$HOME/Library/Caches/Firefox" "Firefox кэш"
echo ""

# 3b. Уровень 1 — лёгкие кэши и временные артефакты (~0.5 GB)
echo "=== 3b. Уровень 1 (кэши приложений, Apple, hunabapp temp) ==="
cleanup_dir "$HOME/Library/Caches/responsivelyapp-updater" "responsivelyapp-updater кэш"
cleanup_dir "$HOME/Library/Application Support/ResponsivelyApp" "ResponsivelyApp кэш"
cleanup_dir "$HOME/Library/Caches/GeoServices" "GeoServices кэш"
cleanup_dir "$HOME/Library/Caches/com.apple.helpd" "com.apple.helpd кэш"
cleanup_dir "$HOME/Library/Caches/com.apple.CloudTelemetry" "com.apple.CloudTelemetry кэш"
cleanup_dir "$HOME/Library/Caches/com.apple.ctcategories.service" "com.apple.ctcategories.service кэш"
HUNAB_TEMP="$HOME/code/hunabapp-dev/temp"
if [ -d "$HUNAB_TEMP" ]; then
    find "$HUNAB_TEMP" -maxdepth 1 -type f \( -name 'hunab-backend-bundle-*.tar.gz' -o -name 'hunab-backend-logs-*.tar.gz' \) -print0 2>/dev/null | while IFS= read -r -d '' f; do
        size=$(du -sh "$f" 2>/dev/null | cut -f1)
        echo "🗑️  Удаление hunabapp temp: $(basename "$f") ($size)..."
        rm -f "$f" && echo "   ✅ удалён" || echo "   ⚠️  не удалось"
    done
fi
echo "   Build/dist в ~/code (кроме frontend/android)..."
find "$HOME/code" -type d \( -name "build" -o -name "dist" -o -name ".next" -o -name "out" \) \
  -not -path "*/node_modules/*" \
  -not -path "*/venv/*" \
  -not -path "*/.venv/*" \
  -not -path "*/site-packages/*" \
  -not -path "*/env/*" \
  -not -path "*/hunabapp-dev/frontend/android/*" \
  -exec rm -rf {} + 2>/dev/null || true
echo "   ✅ Build-артефакты уровня 1 очищены"
echo ""

# 4. Приложения — Notion, zoom, LibreOffice, Movavi, Ledger (Telegram в DO_NOT_DELETE)
echo "=== 4. Кэши приложений ==="
cleanup_dir "$HOME/Library/Application Support/Notion" "Notion"
cleanup_dir "$HOME/Library/Application Support/zoom.us" "zoom.us"
cleanup_dir "$HOME/Library/Application Support/LibreOffice" "LibreOffice"
cleanup_dir "$HOME/Library/Application Support/Movavi" "Movavi"
cleanup_dir "$HOME/Library/Application Support/Ledger Live" "Ledger Live"
echo ""

# 5. Cursor — только разрешённые кэши и state backup (~10 GB)
echo "=== 5. Cursor кэши (только разрешённые) ==="
STATE_BACKUP="$HOME/Library/Application Support/Cursor/User/globalStorage/state.vscdb.backup"
if [ -f "$STATE_BACKUP" ]; then
    size=$(du -sh "$STATE_BACKUP" 2>/dev/null | cut -f1)
    echo "   state.vscdb.backup ($size) — закрыть Cursor перед удалением!"
    read -p "   Удалить state.vscdb.backup? (y/n): " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        rm -f "$STATE_BACKUP" && echo "   ✅ state.vscdb.backup удалён" || echo "   ⚠️  Закрой Cursor и повтори"
    else
        echo "   ⏭️  Пропущено"
    fi
fi
cleanup_dir "$HOME/Library/Caches/com.todesktop.230313mzl4w4u92.ShipIt" "Cursor ShipIt"
cleanup_dir "$HOME/Library/Application Support/Cursor/WebStorage" "Cursor WebStorage"
cleanup_dir "$HOME/Library/Application Support/Cursor/Partitions" "Cursor Partitions"
cleanup_dir "$HOME/.cursor/projects" "Cursor projects"
echo ""

# 6. Homebrew, .cache, пустые логи
echo "=== 6. Homebrew, .cache, пустые логи ==="
cleanup_dir "$HOME/Library/Caches/anytype-updater" "anytype-updater кэш"
cleanup_dir "$HOME/Library/Caches/Homebrew" "Homebrew кэш"
cleanup_dir "$HOME/.cache" ".cache"
find "$HOME/Library/Logs" -type f -size 0 -delete 2>/dev/null && echo "   ✅ Пустые логи удалены" || true
echo ""

# 7. ScreenRecordings (по желанию)
echo "=== 7. Записи экрана ==="
if [ -d "$HOME/Library/ScreenRecordings" ]; then
    count=$(find "$HOME/Library/ScreenRecordings" -type f 2>/dev/null | wc -l | tr -d ' ')
    if [ "$count" -gt 0 ]; then
        echo "   Найдено файлов: $count"
        read -p "   Удалить все записи экрана? (y/n): " -n 1 -r
        echo
        if [[ $REPLY =~ ^[Yy]$ ]]; then
            cleanup_dir "$HOME/Library/ScreenRecordings" "Записи экрана"
        else
            echo "   ⏭️  Пропущено"
        fi
    else
        echo "   ℹ️  Папка пуста"
    fi
fi
echo ""

# 8. Build артефакты (исключая hunabapp-dev/frontend/android — в DO_NOT_DELETE)
echo "=== 8. Build артефакты в ~/code (кроме android) ==="
read -p "   Удалить build/dist/.next/out? (y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    find "$HOME/code" -type d \( -name "build" -o -name "dist" -o -name ".next" -o -name "out" \) \
      -not -path "*/node_modules/*" \
      -not -path "*/venv/*" \
      -not -path "*/.venv/*" \
      -not -path "*/site-packages/*" \
      -not -path "*/env/*" \
      -not -path "*/hunabapp-dev/frontend/android/*" \
      -exec rm -rf {} + 2>/dev/null || true
    echo "   ✅ Готово"
else
    echo "   ⏭️  Пропущено"
fi
echo ""

# 9. node_modules (опционально; НЕ frontend — в DO_NOT_DELETE)
echo "=== 9. node_modules (кроме hunabapp-dev/frontend) ==="
read -p "   Удалить node_modules в проектах? (y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    find "$HOME/code" -type d -name "node_modules" \
      -not -path "*/venv/*" \
      -not -path "*/.venv/*" \
      -not -path "*/hunabapp-dev/frontend/node_modules" \
      -exec rm -rf {} + 2>/dev/null || true
    echo "   ✅ Готово. В нужных проектах: pnpm install"
else
    echo "   ⏭️  Пропущено"
fi
echo ""

# 10. UTM виртуальная машина — опционально
echo "=== 10. UTM виртуальная машина ==="
if [ -d "$HOME/code/Parrot-home-mate-6.4_arm64.utm" ]; then
    read -p "   Удалить UTM виртуальную машину? (y/n): " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        cleanup_dir "$HOME/code/Parrot-home-mate-6.4_arm64.utm" "UTM виртуальная машина"
    else
        echo "   ⏭️  Пропущено"
    fi
else
    echo "   ℹ️  Не найдена"
fi
echo ""

echo "=========================================================="
echo "📊 Состояние диска после очистки:"
df -h / | tail -1
echo ""
echo "✅ Очистка завершена. Перезапустите приложения при необходимости."
echo "   Разрешено: docs/disk_cleanup/DISK_CLEANUP.md"
echo "   Запрещено: docs/disk_cleanup/DO_NOT_DELETE.md"
echo ""

