#!/bin/bash

# Production Database and File Backup Script
# Execute this on production server BEFORE migration
# Usage: ./production_backup.sh [timestamp_suffix]

set -e  # Exit on any error

# Configuration
TIMESTAMP=$(date +"%Y%m%d-%H%M%S")
if [ ! -z "$1" ]; then
    TIMESTAMP="$TIMESTAMP-$1"
fi

BACKUP_DIR="/var/backups/pos-$TIMESTAMP"
DB_BACKUP_FILE="$BACKUP_DIR/pos-database-$TIMESTAMP.sql.gz"
FILES_BACKUP_FILE="$BACKUP_DIR/pos-files-$TIMESTAMP.tar.gz"

echo "Starting production backup at $TIMESTAMP"
echo "Backup directory: $BACKUP_DIR"

# Create backup directory
sudo mkdir -p "$BACKUP_DIR"
sudo chown $(whoami):$(whoami) "$BACKUP_DIR"

# Database backup (adjust connection details as needed)
echo "Creating database backup..."
mysqldump \
    --single-transaction \
    --routines \
    --triggers \
    --all-databases \
    --user=YOUR_DB_USER \
    --password=YOUR_DB_PASSWORD \
    --host=YOUR_DB_HOST \
    | gzip > "$DB_BACKUP_FILE"

echo "Database backup created: $DB_BACKUP_FILE"

# Verify database backup
echo "Verifying database backup..."
gunzip -c "$DB_BACKUP_FILE" | head -20 > /dev/null
echo "Database backup verification passed"

# File system backup
echo "Creating file system backup..."
tar -czf "$FILES_BACKUP_FILE" \
    --exclude='storage/logs/*' \
    --exclude='storage/framework/cache/*' \
    --exclude='storage/framework/sessions/*' \
    --exclude='storage/framework/views/*' \
    --exclude='bootstrap/cache/*' \
    --exclude='node_modules' \
    --exclude='.git' \
    storage/ \
    public/ \
    .env \
    composer.lock \
    package-lock.json

echo "File system backup created: $FILES_BACKUP_FILE"

# Verify file backup
echo "Verifying file backup..."
tar -tzf "$FILES_BACKUP_FILE" | head -10 > /dev/null
echo "File backup verification passed"

# Get backup sizes
DB_SIZE=$(du -h "$DB_BACKUP_FILE" | cut -f1)
FILES_SIZE=$(du -h "$FILES_BACKUP_FILE" | cut -f1)

echo "Backup completed successfully!"
echo "Database backup: $DB_SIZE"
echo "Files backup: $FILES_SIZE"
echo "Total backup size: $(du -sh "$BACKUP_DIR" | cut -f1)"
echo ""
echo "BACKUP LOCATION: $BACKUP_DIR"
echo "RESTORE COMMANDS (if needed):"
echo "  # Database restore:"
echo "  gunzip -c '$DB_BACKUP_FILE' | mysql -u YOUR_DB_USER -p YOUR_DB_NAME"
echo ""
echo "  # Files restore:"
echo "  sudo tar -xzf '$FILES_BACKUP_FILE' -C /"
echo ""
echo "BACKUP VERIFICATION:"
echo "  # Check database backup contains tables:"
echo "  gunzip -c '$DB_BACKUP_FILE' | grep '^CREATE TABLE' | wc -l"
echo ""
echo "  # Check file backup contents:"
echo "  tar -tzf '$FILES_BACKUP_FILE' | head -20"
