#!/bin/bash

source ~/awscli-env/bin/activate
# Usage: ./backup_script.sh -l true or ./backup_script.sh -l false

# Parse command-line argument for local_db flag
while getopts "l:" opt; do
  case $opt in
    l)
      LOCAL_DB=$OPTARG
      ;;
    *)
      echo "Usage: $0 -l [true|false]"
      exit 1
      ;;
  esac
done

# Validate LOCAL_DB argument
if [ "$LOCAL_DB" != "true" ] && [ "$LOCAL_DB" != "false" ]; then
  echo "Error: Invalid value for -l. Must be 'true' or 'false'."
  exit 1
fi

# Set the database path and backup destination based on LOCAL_DB value
if [ "$LOCAL_DB" = true ]; then
    DB_PATH="/Users/donov/databases/nkode.db"
    BACKUP_DIR="/var/tmp"
else
    DB_PATH="/home/dkelly/database/nkode.db"
    BACKUP_DIR="/var/tmp"
fi

BACKUP_NAME="backup_nkode_$(date +'%Y%m%d%H%M%S').tar.gz"

# Check if the database file exists
if [ ! -f "$DB_PATH" ]; then
    echo "Error: Database file not found at $DB_PATH"
    exit 1
fi

# Perform a WAL checkpoint to flush the WAL file to the main DB file
echo "Checkpointing WAL..."
sqlite3 "$DB_PATH" "PRAGMA wal_checkpoint(FULL);"
if [ $? -ne 0 ]; then
    echo "Error: Failed to checkpoint WAL"
    exit 1
fi

# Check if related files (.wal, .shm) exist
WAL_FILE="${DB_PATH}-wal"
SHM_FILE="${DB_PATH}-shm"

# Create a list of files to back up (main DB, WAL, and SHM if they exist)
FILES_TO_BACKUP=("$DB_PATH")
if [ -f "$WAL_FILE" ]; then
    FILES_TO_BACKUP+=("$WAL_FILE")
fi
if [ -f "$SHM_FILE" ]; then
    FILES_TO_BACKUP+=("$SHM_FILE")
fi

# Create a tar.gz archive of the database and related files
echo "Creating backup..."
tar -czf "$BACKUP_DIR/$BACKUP_NAME" "${FILES_TO_BACKUP[@]}"
if [ $? -eq 0 ]; then
    echo "Backup successful: $BACKUP_DIR/$BACKUP_NAME"
else
    echo "Error: Backup failed"
    exit 1
fi

# Upload backup to S3
aws s3 cp "$BACKUP_DIR/$BACKUP_NAME" s3://nkode-db-backup
if [ $? -eq 0 ]; then
    echo "Backup uploaded to S3 successfully."
else
    echo "Error: Failed to upload backup to S3."
    exit 1
fi
