#!/usr/bin/env bash
# scripts/qa/phpunit - Run PHPUnit test suite
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
DB_BACKUP_FILE="$PROJECT_ROOT/tests/cache/auc-14-5-test.fbk"
FIREBIRD_CONTAINER="dev-satag-amicron-entity-bundle-firebird-server"
FIREBIRD_BACKUP_PATH="/tmp/auc-14-5-test.fbk"
DBNAME="/firebird/data/auc-test.fdb"
DBUSER="sysdba"
DBPASSWORD="masterkey"

# Create cache directory if needed
mkdir -p "$PROJECT_ROOT/tests/cache"

# Download backup if missing or older than 24 hours
if [[ ! -f "$DB_BACKUP_FILE" ]] || [[ $(find "$DB_BACKUP_FILE" -mtime +1 2>/dev/null) ]]; then
    echo "Downloading test database backup..."
    curl -sL "https://data.satware.com/s/5zTP4DgqnBFZy2A/download" -o "$DB_BACKUP_FILE"
fi

# Restore database
echo "Copying backup to firebird container..."
docker cp "$DB_BACKUP_FILE" "$FIREBIRD_CONTAINER:$FIREBIRD_BACKUP_PATH"

echo "Restoring test database..."
docker exec "$FIREBIRD_CONTAINER" gbak -REP \
    -user "$DBUSER" \
    -password "$DBPASSWORD" \
    "$FIREBIRD_BACKUP_PATH" \
    "$DBNAME"

echo "Cleaning up temporary backup..."
docker exec "$FIREBIRD_CONTAINER" rm -f "$FIREBIRD_BACKUP_PATH"

echo "Applying VARCHAR column extensions..."
SQL_SCRIPT="$PROJECT_ROOT/scripts/db/extend-varchar-columns.sql"
if [[ -f "$SQL_SCRIPT" ]]; then
    docker cp "$SQL_SCRIPT" "$FIREBIRD_CONTAINER:/tmp/extend-varchar-columns.sql"
    docker exec "$FIREBIRD_CONTAINER" /opt/firebird/bin/isql \
        -user "$DBUSER" \
        -password "$DBPASSWORD" \
        "$DBNAME" \
        -input /tmp/extend-varchar-columns.sql \
        -quiet 2>&1 || true
    docker exec "$FIREBIRD_CONTAINER" rm -f /tmp/extend-varchar-columns.sql
fi

echo "Database restore complete."
echo ""

# Apply VARCHAR expansion
echo "Applying VARCHAR expansion..."
docker exec -i "$FIREBIRD_CONTAINER" /opt/firebird/bin/isql -user "$DBUSER" -password "$DBPASSWORD" "$DBNAME" < "$PROJECT_ROOT/scripts/db/extend-varchar-columns.sql"
echo "VARCHAR expansion complete."
echo ""

# Run PHPUnit with database restore skipped (already done above)
docker compose exec --user=application -w /app app_server \
    env SKIP_DB_RESTORE=1 php ./vendor/bin/phpunit "$@"