BUILD_ID=$1
ROOT_PATH=$2

NETWORK_NAME="${BUILD_ID}_testnetwork"
ALLOY_CONTAINER_NAME="integrationalloy"
NODE_CONTAINER_NAME="${BUILD_ID}_fastify_app"
ERROR_CODE=0

docker build -t ${NODE_CONTAINER_NAME}:${BUILD_ID} -f $ROOT_PATH/examples/fastify/Dockerfile $ROOT_PATH/

docker network create $NETWORK_NAME

docker run -d \
    -v "$ROOT_PATH/alloy/integration-test.alloy:/etc/alloy/config.alloy:ro" \
    --network $NETWORK_NAME \
    --name $ALLOY_CONTAINER_NAME \
    -p 4317:4317 \
    -p 4318:4318 \
    grafana/alloy:v1.9.2 \
    run --server.http.listen-addr=0.0.0.0:12345 --stability.level=experimental /etc/alloy/config.alloy

MAX_RETRIES=10
COUNTER=0
echo "$ALLOY_CONTAINER_NAME container status"
until [ "$(docker inspect -f {{.State.Running}} $ALLOY_CONTAINER_NAME)" = true ]; do
    sleep 2
    docker inspect -f {{.State.Running}} $ALLOY_CONTAINER_NAME
    COUNTER=$((COUNTER + 1))
    if [ $COUNTER -ge $MAX_RETRIES ]; then
        echo "Exceeded maximum retries. Exiting."
        ERROR_CODE=1
        break
    fi
done

if [[ $ERROR_CODE -eq 0 ]]; then
    docker run --detach \
        --network $NETWORK_NAME \
        --name $NODE_CONTAINER_NAME \
        -e DB_DISABLED="true" \
        -e SERVER_HOST="0.0.0.0" \
        -e OTEL_COLLECTOR_URL="http://integrationalloy:4317" \
        --health-cmd="curl -f http://${NODE_CONTAINER_NAME}:9091/api/health > /dev/null || exit 1" \
        --health-start-period=1s \
        --health-retries=10 \
        --health-interval=1s \
        -p 9091:9091 \
        ${NODE_CONTAINER_NAME}:${BUILD_ID}

    COUNTER=0
    echo "$NODE_CONTAINER_NAME container status"
    until [ "$(docker inspect -f {{.State.Health.Status}} $NODE_CONTAINER_NAME)" = "healthy" ]; do
        sleep 1
        docker inspect -f {{.State.Health.Status}} $NODE_CONTAINER_NAME
        COUNTER=$((COUNTER + 1))
        if [ $COUNTER -ge $MAX_RETRIES ]; then
            echo "Exceeded maximum retries. Exiting."
            ERROR_CODE=1
            break
        fi
    done
fi

if [[ $ERROR_CODE -eq 0 ]]; then
    sleep 2
    curl -X GET -f http://localhost:9091/api/dummy -H 'Content-Type: application/json'
    sleep 2
    curl -X GET -f http://localhost:9091/api/dummy -H 'Content-Type: application/json'
fi

# sleep N seconds to await instrumentation flow send and receiving signals
sleep 1

# Copy logs from container to file
docker container logs $ALLOY_CONTAINER_NAME >&$ROOT_PATH/packages/sdk-node/test/integration/logs.txt
echo "log file at $ROOT_PATH/packages/sdk-node/test/integration/logs.txt"

docker container stop $ALLOY_CONTAINER_NAME
docker container stop $NODE_CONTAINER_NAME

docker container rm -f $ALLOY_CONTAINER_NAME
docker container rm -f $NODE_CONTAINER_NAME

docker image rm ${NODE_CONTAINER_NAME}:${BUILD_ID}

docker network rm $NETWORK_NAME

exit $ERROR_CODE
