#!/bin/bash
# Backup the project vault/workspace
# Excludes node_modules, .git, and other heavy/regenerable content
# NOTE: This script needs chmod +x to be executable
#
# CONFIGURATION:
# - Set VAULT_DIR to your vault/workspace root directory
# - Set BACKUP_DEST to your backup destination (local path or cloud storage via rclone)
# - If using rclone, ensure it is configured: https://rclone.org/docs/

VAULT_DIR="${VAULT_DIR:-$(cd "$(dirname "$0")/../.." && pwd)}"
BACKUP_NAME="vault-backup.zip"
TMP_ZIP="/tmp/$BACKUP_NAME"

# Uncomment and configure ONE of these backup destinations:
# Option 1: Local directory backup
# BACKUP_DEST="/path/to/backup/directory"
# Option 2: Google Drive via rclone
# RCLONE_REMOTE="gdrive-backup"
# RCLONE_FOLDER="Vault Backups"

echo "Backing up vault..."
echo "  Source: $VAULT_DIR"

# Create zip excluding heavy/regenerable content
cd "$VAULT_DIR" || { echo "ERROR: Vault directory not found at $VAULT_DIR"; exit 1; }

zip -r -q "$TMP_ZIP" . \
  -x "*/node_modules/*" \
  -x "*/.git/*" \
  -x "*/.vault-search/*" \
  -x "*/.DS_Store" \
  -x "*.pyc" \
  -x "*/__pycache__/*" \
  -x "*/dist/*" \
  -x "*/build/*" \
  -x "*/.next/*"

if [ $? -ne 0 ]; then
  echo "ERROR: zip failed"
  exit 1
fi

ZIP_SIZE=$(du -h "$TMP_ZIP" | cut -f1)
echo "  Zip created: $ZIP_SIZE"

# Upload based on configured destination
if [ -n "$RCLONE_REMOTE" ] && [ -n "$RCLONE_FOLDER" ]; then
    # Cloud backup via rclone
    echo "  Destination: $RCLONE_REMOTE:$RCLONE_FOLDER/$BACKUP_NAME"
    rclone copyto "$TMP_ZIP" "$RCLONE_REMOTE:$RCLONE_FOLDER/$BACKUP_NAME" --progress 2>&1
    if [ $? -ne 0 ]; then
      echo "ERROR: Upload failed"
      rm -f "$TMP_ZIP"
      exit 1
    fi
elif [ -n "$BACKUP_DEST" ]; then
    # Local backup
    echo "  Destination: $BACKUP_DEST/$BACKUP_NAME"
    mkdir -p "$BACKUP_DEST"
    cp "$TMP_ZIP" "$BACKUP_DEST/$BACKUP_NAME"
    if [ $? -ne 0 ]; then
      echo "ERROR: Copy failed"
      rm -f "$TMP_ZIP"
      exit 1
    fi
else
    echo "WARNING: No backup destination configured."
    echo "  Edit this script to set BACKUP_DEST or RCLONE_REMOTE/RCLONE_FOLDER."
    echo "  Zip saved to: $TMP_ZIP"
    exit 0
fi

# Clean up temp file
rm -f "$TMP_ZIP"

echo "Backup complete!"
echo "  Size: $ZIP_SIZE"
echo "  Time: $(date '+%Y-%m-%d %H:%M:%S')"
