#!/bin/bash

# Simple mysqldump script using Docker container
# Creates a standard MySQL dump file

# Load database name from .env
DB_NAME=$(grep "^DB_DATABASE=" .env | cut -d '=' -f2 | tr -d '"' | tr -d "'")
DB_USER=$(grep "^DB_USERNAME=" .env | cut -d '=' -f2 | tr -d '"' | tr -d "'")
DB_PASS=$(grep "^DB_PASSWORD=" .env | cut -d '=' -f2 | tr -d '"' | tr -d "'")

if [ -z "$DB_NAME" ]; then
    echo "Error: DB_DATABASE not found in .env"
    exit 1
fi

# Generate filename with timestamp
TIMESTAMP=$(date +%Y-%m-%d_%H%M%S)
FILENAME="database_dump_${DB_NAME}_${TIMESTAMP}.sql"
FILEPATH="./${FILENAME}"

echo "Creating database dump using mysqldump..."
echo "Database: ${DB_NAME}"
echo "Output file: ${FILENAME}"
echo ""

# Use docker exec to run mysqldump from the MySQL container
docker exec laravel-10-blog-main-mysql-1 mysqldump \
    -u${DB_USER} \
    -p${DB_PASS} \
    --single-transaction \
    --routines \
    --triggers \
    --events \
    --quick \
    --lock-tables=false \
    --default-character-set=utf8mb4 \
    ${DB_NAME} > ${FILEPATH} 2>&1

EXIT_CODE=$?

if [ $EXIT_CODE -ne 0 ]; then
    echo "Error: mysqldump failed!"
    cat ${FILEPATH}
    rm -f ${FILEPATH}
    exit 1
fi

# Check if file was created and has content
if [ ! -f "$FILEPATH" ] || [ ! -s "$FILEPATH" ]; then
    echo "Error: Dump file was not created or is empty!"
    exit 1
fi

# Get file size
FILESIZE=$(stat -c%s "$FILEPATH" 2>/dev/null || stat -f%z "$FILEPATH" 2>/dev/null)
FILESIZE_MB=$(echo "scale=2; $FILESIZE / 1024 / 1024" | bc)

echo "Database dump completed successfully!"
echo "File size: ${FILESIZE_MB} MB"
echo "File location: ${FILEPATH}"
echo ""

# Compress the dump file
if command -v gzip &> /dev/null; then
    echo "Compressing dump file..."
    gzip -9 "$FILEPATH"
    GZ_FILEPATH="${FILEPATH}.gz"
    GZ_FILESIZE=$(stat -c%s "$GZ_FILEPATH" 2>/dev/null || stat -f%z "$GZ_FILEPATH" 2>/dev/null)
    GZ_FILESIZE_MB=$(echo "scale=2; $GZ_FILESIZE / 1024 / 1024" | bc)
    COMPRESSION_RATIO=$(echo "scale=1; (1 - $GZ_FILESIZE / $FILESIZE) * 100" | bc)
    
    echo "Compressed file: ${FILENAME}.gz (${GZ_FILESIZE_MB} MB)"
    echo "Compression ratio: ${COMPRESSION_RATIO}%"
    echo ""
    echo "To import to live database:"
    echo "  gunzip < ${FILENAME}.gz | mysql -u username -p database_name"
else
    echo "To import to live database:"
    echo "  mysql -u username -p database_name < ${FILENAME}"
fi

echo ""
echo "Done!"
