#!/bin/bash

CURRENTPATH=`pwd`
pushd `dirname $0` > /dev/null
SCRIPTPATH=`pwd`
popd > /dev/null

cd $CURRENTPATH/container
if [ -f ../service_tag.sh ]; then
	. ../service_tag.sh
	if [ -z $SERVICE_TAG ]; then
		SERVICE_TAG=local
	  set -- full
	fi
	if [ -z $PROJECT_NAME ]; then
		PROJECT_NAME=longtan
	fi
	if [ -z $STACK ]; then
		STACK=default
	fi
	if [ -z $NODEMON ]; then
		NODEMON=true
	fi
else
	SERVICE_TAG=local
	PROJECT_NAME=longtan
	STACK=default
	NODEMON=true
	set -- full
fi
export SERVICE_TAG
export STACK
export GLOBAL_CONFIG_FILE
export NODEMON
ARCH=`uname -m`
if [ $ARCH == 'aarch64' ] || [ $ARCH == 'arm64' ]; then
	export EXTRA_ARCH='arm'
fi
OS_TYPE=`uname -s`
if [ $OS_TYPE == 'Darwin' ]; then
	export MACHINE_UUID=`system_profiler SPHardwareDataType | awk '/Hardware UUID:/ {print $NF}'`
fi

if [ ! -z $1 ] && [ $1 == 'full' ]; then
	docker exec -it ${PROJECT_NAME}_node yarn
	RETVAL=$?
	if [ $RETVAL == 1 ]; then
		docker run --rm -it \
			--volume $CURRENTPATH:/code:delegated \
			metasights/node-bill:22.13.1-1${EXTRA_ARCH} \
			bash -c "cd /code && yarn config set registry https://registry.npm.taobao.org && yarn"
	fi
	# node ops_mid > uuid
fi

cd $SERVICE_TAG
if [[ $SERVICE_TAG == production* ]] || [[ $SERVICE_TAG == staging* ]] || [ $SERVICE_TAG == 'development' ]; then
	if [ ! -z $1 ] && [ $1 == 'full' ] || [ ! -f ./graceful_start.sh ]; then
		echo 'Taking down cluster...'
		if [ ! -z "$SWARM_MODE" ]; then
			docker stack rm ${PROJECT_NAME}
			echo "Waiting for stack stop..."
			until [[ -z $(docker stack ps ${PROJECT_NAME} -q) ]]; do sleep 1; done
		else
			docker compose --project-name ${PROJECT_NAME} down --remove-orphans
		fi
		echo 'Bringing back cluster...'
		if [ ! -z "$SWARM_MODE" ]; then
			docker stack deploy --compose-file docker-compose.yml --prune ${PROJECT_NAME}
		else
			docker compose --project-name ${PROJECT_NAME} up --detach
		fi
	else
		echo "Running graceful restart..."
		. ./graceful_start.sh
	fi
elif [[ $SERVICE_TAG == local* ]]; then
	echo 'Taking down cluster...'
	if [ ! -z "$SWARM_MODE" ]; then
		docker stack rm ${PROJECT_NAME}
		echo "Waiting for stack stop..."
		until [[ -z $(docker stack ps ${PROJECT_NAME} -q) ]]; do sleep 1; done
	else
		docker compose --project-name ${PROJECT_NAME} down --remove-orphans
	fi
	echo 'Bringing back cluster...'
	if [ ! -z "$SWARM_MODE" ]; then
		docker stack deploy --compose-file docker-compose.yml --prune ${PROJECT_NAME}
	else
		docker compose --project-name ${PROJECT_NAME} up --detach
	fi
else
	echo "No proper SERVICE_TAG. Current: $SERVICE_TAG"
	exit 1
fi
sleep 2
docker ps -a --format "table {{.Names}}\t{{.Status}}"

if [ -z $NO_LOG ]; then
	echo 'Loading docker logs...'
	if [ ! -z $COMPOSE_LOG ]; then
		docker compose --project-name ${PROJECT_NAME} logs --tail=100 --follow --no-log-prefix | $CURRENTPATH/node_modules/.bin/bunyan
	elif [[ $SERVICE_TAG == production* ]] || [[ $SERVICE_TAG == staging* ]] || [ $SERVICE_TAG == 'development' ]; then
		tail -f -n 10 /data/logs/${PROJECT_NAME}/*.log | $CURRENTPATH/node_modules/.bin/bunyan
	elif [ ! -z $COMPOSE_V2_LOG ]; then
		echo "Show logs by docker-compose v2 mode..."
		docker compose --project-name ${PROJECT_NAME} logs --tail=100 --follow --no-log-prefix | sed 's/^ *//' | $CURRENTPATH/node_modules/.bin/bunyan
	elif [ ! -z "$SWARM_MODE" ]; then
		echo "Not supported yet"
	else
		docker compose --project-name ${PROJECT_NAME} logs --tail=100 --follow --no-log-prefix | $CURRENTPATH/node_modules/.bin/bunyan
	fi
fi