#!/bin/bash

#Licensed to the Apache Software Foundation (ASF) under one
#or more contributor license agreements.  See the NOTICE file
#distributed with this work for additional information
#regarding copyright ownership.  The ASF licenses this file
#to you under the Apache License, Version 2.0 (the
#"License"); you may not use this file except in compliance
#with the License.  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#Unless required by applicable law or agreed to in writing,
#software distributed under the License is distributed on an
#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#KIND, either express or implied.  See the License for the
#specific language governing permissions and limitations
#under the License.

function cleanup {
  if [ -n "$(docker ps -q -f name=glv-examples)" ]
  then
    echo -n "Shutting down container: "
    docker stop glv-examples
  fi
  if [ -n "$(docker ps -q -f name=glv-examples-modern)" ]
  then
    echo -n "Shutting down container: "
    docker stop glv-examples-modern
  fi
}
trap cleanup EXIT

open -a Docker
docker pull tinkerpop/gremlin-server
docker run -d --rm -p 8182:8182 --name glv-examples --health-cmd="curl -f http://localhost:8182/ || exit 1" --health-interval=5s --health-timeout=3s tinkerpop/gremlin-server

echo
echo "Not having Docker open initially or occupying port 8182 may cause an error loop. If so, simply restart this script."
echo -n "Starting Gremlin server on port 8182..."
until docker inspect --format '{{.State.Health.Status}}' glv-examples | grep -q "healthy"; do
     echo -n "."
     sleep 1
done
echo

cd gremlin-driver/src/main/java/examples || exit
mvn clean install

echo
echo "Running Java examples"
java -cp target/run-examples-shaded.jar examples.Connections
java -cp target/run-examples-shaded.jar examples.BasicGremlin
cd ../../../../.. || exit

echo
echo "Running python examples:"
python3 gremlin-python/src/main/python/examples/connections.py
python3 gremlin-python/src/main/python/examples/basic_gremlin.py

echo
echo "Running JavaScript examples:"
npm install --prefix gremlin-js/gremlin-javascript/examples
node gremlin-js/gremlin-javascript/examples/connections.js
node gremlin-js/gremlin-javascript/examples/basic-gremlin.js

echo
echo "Running .NET examples:"
dotnet run --project gremlin-dotnet/Examples/Connections
dotnet run --project gremlin-dotnet/Examples/BasicGremlin

echo
echo "Running Go examples:"
cd gremlin-go/examples || exit
go run connections.go
go run basic_gremlin.go
cd ../.. || exit

echo
echo -n "Shutting down container: "
docker stop glv-examples

echo
docker run -d --rm -p 8182:8182 --name glv-examples-modern --health-cmd="curl -f http://localhost:8182/ || exit 1" --health-interval=5s --health-timeout=3s tinkerpop/gremlin-server conf/gremlin-server-modern.yaml
echo -n "Starting Modern server on port 8182..."
until docker inspect --format '{{.State.Health.Status}}' glv-examples-modern | grep -q "healthy"; do
     echo -n "."
     sleep 1
done
echo

echo
echo "Running Java traversals"
cd gremlin-driver/src/main/java/examples || exit
java -cp target/run-examples-shaded.jar examples.ModernTraversals
cd ../../../../.. || exit

echo
echo "Running python traversals:"
python3 gremlin-python/src/main/python/examples/modern_traversals.py

echo
echo "Running JavaScript traversals:"
npm install --prefix gremlin-js/gremlin-javascript/examples
node gremlin-js/gremlin-javascript/examples/modern-traversals.js

echo
echo "Running .NET traversals:"
dotnet run --project gremlin-dotnet/Examples/ModernTraversals

echo
echo "Running Go traversals:"
cd gremlin-go/examples || exit
go run modern_traversals.go
cd ../.. || exit

echo
echo -n "Shutting down container: "
docker stop glv-examples-modern
