#!/bin/bash
set -e

# Configuration
MAX_ATTEMPTS=5
ATTEMPT=1
RETRY_DELAY=10
LOCK_TIMEOUT=5000
STATEMENT_TIMEOUT=5000

echo "Starting Django migrations with retry logic"
echo "- Max attempts: $MAX_ATTEMPTS"
echo "- Retry delay: $RETRY_DELAY seconds"
echo "- Lock timeout: $LOCK_TIMEOUT ms"
echo "- Statement timeout: $STATEMENT_TIMEOUT ms"

# Function to run migration with DB lock timeout
run_migration() {
  echo "Migration attempt $ATTEMPT of $MAX_ATTEMPTS..."
  DJANGO_DB_OPTIONS="{\"lock_timeout\": $LOCK_TIMEOUT, \"statement_timeout\": $STATEMENT_TIMEOUT}}" uv run --no-dev manage.py migrate_all
  return $?
}

# Main retry loop
while [ $ATTEMPT -le $MAX_ATTEMPTS ]; do
  run_migration
  RESULT=$?
  
  if [ $RESULT -eq 0 ]; then
    echo "Migration succeeded on attempt $ATTEMPT!"
    exit 0
  else
    echo "Migration attempt $ATTEMPT failed with exit code $RESULT"
    if [ $ATTEMPT -lt $MAX_ATTEMPTS ]; then
      echo "Waiting $RETRY_DELAY seconds before retrying..."
      sleep $RETRY_DELAY
      ATTEMPT=$((ATTEMPT+1))
    else
      echo "All $MAX_ATTEMPTS migration attempts failed. Giving up."
      exit $RESULT
    fi
  fi
done