#!/bin/bash

# Function to display usage
usage() {
    echo "Usage: $0 -s /path/to/moodle -b /path/to/backup_folder"
    echo "  -s    Source Moodle web installation directory"
    echo "  -b    Target folder where backups will be stored"
    exit 1
}

# Parse named parameters
while getopts "s:b:" opt; do
    case $opt in
        s) MOODLE_DIR="$optarg" ;;
        b) BACKUP_DEST="$optarg" ;;
        *) usage ;;
    esac
done

# Validation
if [[ -z "$MOODLE_DIR" || -z "$BACKUP_DEST" ]]; then
    usage
fi

if [[ ! -d "$MOODLE_DIR" ]]; then
    echo "Error: Moodle directory $MOODLE_DIR not found."
    exit 1
fi

# Create backup destination if it doesn't exist
mkdir -p "$BACKUP_DEST"

# 1. Extraction of Configuration Data
# We extract DB credentials and dataroot path directly from config.php
if [[ -f "$MOODLE_DIR/config.php" ]]; then
    DB_NAME=$(php -r "include '$MOODLE_DIR/config.php'; echo \$CFG->dbname;")
    DB_USER=$(php -r "include '$MOODLE_DIR/config.php'; echo \$CFG->dbuser;")
    DB_PASS=$(php -r "include '$MOODLE_DIR/config.php'; echo \$CFG->dbpass;")
    DB_HOST=$(php -r "include '$MOODLE_DIR/config.php'; echo \$CFG->dbhost;")
    DATA_ROOT=$(php -r "include '$MOODLE_DIR/config.php'; echo \$CFG->dataroot;")
else
    echo "Error: config.php not found. Cannot determine database or dataroot."
    exit 1
fi

TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
echo "--- Starting Moodle Backup ($TIMESTAMP) ---"

# 2. Database Backup
echo "Backing up database ($DB_NAME)..."
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$BACKUP_DEST/db_backup_$TIMESTAMP.sql.gz"

# 3. Web Files Backup (Excluding large cache directories if necessary)
echo "Archiving Moodle web files..."
tar -czf "$BACKUP_DEST/web_backup_$TIMESTAMP.tar.gz" -C "$(dirname "$MOODLE_DIR")" "$(basename "$MOODLE_DIR")"

# 4. MoodleData Backup
if [[ -d "$DATA_ROOT" ]]; then
    echo "Archiving MoodleData ($DATA_ROOT)..."
    # We exclude the 'cache', 'localcache', and 'temp' folders to save space, as they are regenerated
    tar --exclude='cache' --exclude='localcache' --exclude='temp' \
        -czf "$BACKUP_DEST/data_backup_$TIMESTAMP.tar.gz" -C "$(dirname "$DATA_ROOT")" "$(basename "$DATA_ROOT")"
else
    echo "Warning: Dataroot directory not found at $DATA_ROOT"
fi

echo "--- Backup Process Completed Successfully ---"
echo "Archives located in: $BACKUP_DEST"