#!/bin/bash
mode="engine"
docker="false"

if [[ $* =~ ^(engine|core|lqs|api-dev|api)$ ]]; then 
	mode=$1 
fi

if [[ $* =~ ^(docker)$ ]]; then 
	docker="true"
fi

echo "[ Run mode=$mode ]"
echo "[ Docker=$docker ]"


# +++ DEFAULT COMMANDS +++ #

if [[ $docker == "false" ]]; then

	### Runs Engine Core & Liquidsoap ###

	if [[ $mode == "engine" ]]; then
		/usr/bin/env python3.7 engine-core.py
	fi

	### Runs Engine Core only ###

	if [[ $mode == "core" ]]; then
		/usr/bin/env python3.7 engine-core.py --without-lqs
	fi

	### Runs Liquidsoap only ###

	if [[ $mode == "lqs" ]]; then
		lqs=$(/usr/bin/env python3.7 engine-core.py --get-lqs-command)
		eval "$lqs"
	fi

	### Runs the API Server (Development) ###

	if [[ $mode == "api-dev" ]]; then
		echo "Building Web Applications"
		sh ./script/build-web.sh
		echo "Starting API Server"
		/usr/bin/env python3.7 engine-api.py
	fi

	### Runs the API Server (Production) ###

	if [[ $mode == "api" ]]; then
		echo "Building Web Applications"
		sh ./script/build-web.sh
		echo "Activating Python Environment"
		source ../python-env/bin/activate
		echo "Starting API Server"
		gunicorn -c configuration/gunicorn.conf.py engine-api:app
	fi

fi


# +++ DOCKER COMMANDS +++ #

if [[ $docker == "true" ]]; then
	BASE_D=$(realpath "${BASH_SOURCE%/*}/")

	### Runs Engine Core & Liquidsoap ###

	if [[ $mode == "engine" ]]; then
		exec sudo docker run --name aura-engine --rm -it \
			-u $UID:$GID \
			-p 127.0.0.1:8050:5000 \
			-v "$BASE_D":/srv \
			-v "$BASE_D/configuration/":/etc/aura \
			--tmpfs /var/log/aura/ aura/engine /srv/engine-core.py
	fi

	### Runs Engine Core only ###

	if [[ $mode == "core" ]]; then
		exec sudo docker run --name aura-engine-core --rm -it \
			-u $UID:$GID \
			-p 127.0.0.1:8050:5000 \
			-v "$BASE_D":/srv \
			-v "$BASE_D/configuration/":/etc/aura \
			--tmpfs /var/log/aura/ aura/engine /srv/engine-core.py "--without-lqs"
	fi

	### Runs Liquidsoap only ###

	if [[ $mode == "lqs" ]]; then
		lqs=$(/usr/bin/env python3.7 engine-core.py --get-lqs-command)
		eval "$lqs"

		exec sudo docker run --name aura-engine-liquidsoap --rm -it \
			-u 1000:1000 \
			-v "$BASE_D":/srv \
			-v "$BASE_D/configuration/":/etc/aura \
			--tmpfs /var/log/aura/ \
			--device /dev/snd aura/engine /bin/bash \
			-c "cd /srv/modules/liquidsoap && liquidsoap --debug --verbose engine.liq"

	fi

	### Runs Engine API using Gunicorn ###

	if [[ $mode == "engine" ]]; then
		exec sudo docker run --name aura-engine-api --rm -it \
			-u $UID:$GID \
			-p 127.0.0.1:8050:5000 \
			-v "$BASE_D":/srv \
			-v "$BASE_D/configuration/":/etc/aura \
			--tmpfs /var/log/aura/ aura/engine /srv/engine-api.py \
			--device aura/engine /bin/bash \
			-c "gunicorn -c configuration/gunicorn.conf.py engine-api:app"
	fi
fi