#!/usr/bin/env bash
#
# Test end-to-end: avvia un MySQL usa-e-getta con lo schema del progetto,
# esegue la suite contro mock di Telegram e NOWPayments, poi ripulisce.
#
#   ./test/run-e2e.sh
#
set -euo pipefail

CONTAINER=cryptopost-e2e-mysql
PORT="${TEST_DB_PORT:-33061}"
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"

cleanup() {
  docker rm -f "$CONTAINER" >/dev/null 2>&1 || true
}
trap cleanup EXIT

cleanup

echo "› avvio MySQL di test sulla porta $PORT"
docker run -d --name "$CONTAINER" \
  -e MYSQL_ROOT_PASSWORD=roottest \
  -e MYSQL_DATABASE=cryptopost \
  -e MYSQL_USER=cryptopost \
  -e MYSQL_PASSWORD=testpw \
  -p "$PORT:3306" \
  -v "$ROOT/db/init:/docker-entrypoint-initdb.d:ro" \
  mysql:8.4 >/dev/null

echo "› attendo che il database sia pronto"
for _ in $(seq 1 60); do
  if docker exec "$CONTAINER" mysqladmin ping -uroot -proottest >/dev/null 2>&1; then
    # il ping risponde prima che initdb.d sia stato eseguito
    if docker exec "$CONTAINER" mysql -ucryptopost -ptestpw cryptopost \
         -e 'SELECT 1 FROM tariffe LIMIT 1' >/dev/null 2>&1; then
      break
    fi
  fi
  sleep 2
done

echo "› eseguo la suite"
TEST_DB_PORT="$PORT" node "$ROOT/test/e2e.test.mjs"
