#!/bin/bash
# Test QUIC sync with separate server and client processes

set -e

cd "$(dirname "$0")/.."

SOURCE_REPO="/tmp/heroforge-scm.forge"
DEST_REPO="/tmp/quic_test_dest.forge"
PORT=19876

if [ ! -f "$SOURCE_REPO" ]; then
    echo "Error: Source repo not found: $SOURCE_REPO"
    exit 1
fi

# Get project code from source
PROJECT_CODE=$(sqlite3 "$SOURCE_REPO" "SELECT value FROM config WHERE name='project-code'" 2>/dev/null)
echo "Project code: $PROJECT_CODE"

# Create empty destination repo with same project code
rm -f "$DEST_REPO"
sqlite3 "$DEST_REPO" << EOF
CREATE TABLE IF NOT EXISTS config(name TEXT PRIMARY KEY, value TEXT);
INSERT INTO config(name, value) VALUES('project-code', '$PROJECT_CODE');
CREATE TABLE IF NOT EXISTS blob(rid INTEGER PRIMARY KEY, uuid TEXT UNIQUE, size INTEGER, content BLOB);
CREATE TABLE IF NOT EXISTS delta(rid INTEGER PRIMARY KEY REFERENCES blob, srcid INTEGER REFERENCES blob);
CREATE INDEX IF NOT EXISTS blob_uuid ON blob(uuid);
EOF

echo "Created destination repo: $DEST_REPO"
echo "Source artifacts: $(sqlite3 "$SOURCE_REPO" "SELECT COUNT(*) FROM blob")"
echo "Dest artifacts before: $(sqlite3 "$DEST_REPO" "SELECT COUNT(*) FROM blob")"

# Start server in background
echo ""
echo "Starting server on port $PORT..."
./target/release/examples/quic_server "$SOURCE_REPO" $PORT &
SERVER_PID=$!

# Wait for server to be ready
sleep 1

# Run client
echo ""
echo "Starting client..."
./target/release/examples/quic_client "$DEST_REPO" "127.0.0.1:$PORT"
CLIENT_EXIT=$?

# Wait for server to finish
wait $SERVER_PID 2>/dev/null || true

echo ""
echo "Dest artifacts after: $(sqlite3 "$DEST_REPO" "SELECT COUNT(*) FROM blob")"

exit $CLIENT_EXIT
