#!/bin/bash

#############################################
# Neosolvix Backup Script
# Backs up database, WhatsApp sessions, and .env files
#############################################

# Configuration
APP_DIR="/var/www/neosolvix"
BACKUP_DIR="/var/backups/neosolvix"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7  # Keep backups for 7 days

# Database credentials (read from .env)
DB_NAME="neosolvix_production"
DB_USER="neosolvix"
DB_PASS="your-strong-password"  # Or read from .env

# Create backup directory if it doesn't exist
mkdir -p "$BACKUP_DIR"

# Start backup log
echo "==================================="
echo "Backup started at: $(date)"
echo "==================================="

# 1. Backup MySQL Database
echo "Backing up database..."
mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$BACKUP_DIR/database_$DATE.sql.gz"

if [ $? -eq 0 ]; then
    echo "✓ Database backup successful"
else
    echo "✗ Database backup failed"
    exit 1
fi

# 2. Backup WhatsApp Sessions
echo "Backing up WhatsApp sessions..."
if [ -d "$APP_DIR/whatsapp-service/sessions" ]; then
    tar -czf "$BACKUP_DIR/whatsapp_sessions_$DATE.tar.gz" -C "$APP_DIR/whatsapp-service" sessions
    echo "✓ WhatsApp sessions backup successful"
else
    echo "⚠ WhatsApp sessions directory not found"
fi

# 3. Backup Environment Files
echo "Backing up environment files..."
tar -czf "$BACKUP_DIR/env_files_$DATE.tar.gz" \
    -C "$APP_DIR" .env \
    -C "$APP_DIR/whatsapp-service" .env 2>/dev/null

if [ $? -eq 0 ]; then
    echo "✓ Environment files backup successful"
else
    echo "⚠ Environment files backup incomplete"
fi

# 4. Backup Uploads/Storage (optional - can be large)
# echo "Backing up storage files..."
# tar -czf "$BACKUP_DIR/storage_$DATE.tar.gz" -C "$APP_DIR" storage/app/public

# 5. Remove old backups
echo "Removing backups older than $RETENTION_DAYS days..."
find "$BACKUP_DIR" -name "*.gz" -type f -mtime +$RETENTION_DAYS -delete
echo "✓ Old backups cleaned up"

# 6. Create backup manifest
echo "Creating backup manifest..."
cat > "$BACKUP_DIR/manifest_$DATE.txt" <<EOF
Backup Date: $(date)
Database: database_$DATE.sql.gz
Sessions: whatsapp_sessions_$DATE.tar.gz
Env Files: env_files_$DATE.tar.gz

Files in this backup:
$(ls -lh "$BACKUP_DIR"/*_$DATE.*)
EOF

echo "✓ Backup manifest created"

# Calculate total backup size
TOTAL_SIZE=$(du -sh "$BACKUP_DIR" | cut -f1)
echo "==================================="
echo "Backup completed at: $(date)"
echo "Total backup size: $TOTAL_SIZE"
echo "Backup location: $BACKUP_DIR"
echo "==================================="

# Optional: Upload to remote storage (S3, rsync, etc.)
# Example with rsync:
# rsync -avz "$BACKUP_DIR/" user@remote-server:/backups/neosolvix/

# Optional: Send email notification
# echo "Backup completed successfully. Size: $TOTAL_SIZE" | mail -s "Neosolvix Backup Success" admin@your-domain.com

exit 0
