#!/bin/bash

SERVICE_NAME="o365_mu_users_export"

FACILITY_NAME=$1
DESTINATION=$2
DESTINATION_TYPE=$3

if [ -z "$DESTINATION" ]; then
	echo "Missing Destination argument (DB NAME there)" >&2
	exit 231
fi

if [ -z "$FACILITY_NAME" ]; then
	echo "Missing FacilityName argument" >&2
	exit 232
fi

if [ -z "$DESTINATION_TYPE" ]; then
	echo "Destination type of this service can't be empty" >&2
	exit 233;
else
	TYPE="service-specific"
	if [ "$DESTINATION_TYPE" != "$TYPE" ]; then
		echo "Destination type of this service need to be $TYPE" >&2
		exit 234;
	fi
fi

#Destination is name of database on oracle in localhost tnsnames file
DBNAME=$DESTINATION

SERVICE_FILES_BASE_DIR="`pwd`/../gen/spool"
SERVICE_FILES_DIR="$SERVICE_FILES_BASE_DIR/$FACILITY_NAME/$SERVICE_NAME"

#Just safety check. This should not happen.
if [ ! -d "$SERVICE_FILES_DIR" ]; then echo '$SERVICE_FILES_DIR: '$SERVICE_FILES_DIR' is not a directory' >&2 ; exit 1; fi

#Create lock (same like in slave)
LOCK_DIR=${LOCK_DIR:=/var/lock}
LOCK_FILE="${LOCK_DIR}/perunv3-${SERVICE_NAME}-$DBNAME.lock"
LOCK_PIDFILE="$LOCK_FILE/pid"

function create_lock {
	if mkdir "${LOCK_FILE}"; then
		trap 'rm -r -f "${LOCK_FILE}"' EXIT
		echo $$ > "$LOCK_PIDFILE";
		if [ $? -ne 0 ]; then
			echo "Can't create lock file." >&2
			exit 250
		fi
	else
		# lock file exists, check for existence of concurrent process
		if ps ax | grep "$SERVICE_NAME" | sed 's/^\([0-9]\+\).*/\1/' | grep "\(^\| \)`cat $LOCK_PIDFILE`\( \|$\)"; then
		# concurrent process is running - this skript must terminate
			echo "Concuret process o365_mu_users_export is running" >&2
			exit 249
		else
		# lock is not valid; it should be deleted
			rm -r "$LOCK_FILE"
			if [ $? -ne 0 ]; then
				echo "Can't remove not valid lock file." >&2
				exit 248
			fi
			echo "Invalid lock file found and deleted: $LOCK_FILE" >&2
			mkdir "${LOCK_FILE}"
			if [ $? -ne 0 ]; then
				echo "Can't create lock after removing invalid lock." >&2
				exit 247
			fi
			trap 'rm -r -f "${LOCK_FILE}"' EXIT
			echo $$ > "$LOCK_PIDFILE"
			if [ $? -ne 0 ]; then
				echo "Can't create lock file after removing invalid lock file." >&2
				exit 246
			fi
		fi
	fi
}

create_lock

TMP_HOSTNAME_DIR="`mktemp -d /tmp/perun-send.XXXXXXXXXX`"
if [ $? -ne 0 ]; then
	echo "Can't create temporary dir" >&2
	exit 255
fi

#prepare removing of temporary files and dirs after exit of script
trap 'rm -r -f "${LOCK_FILE}" "${TMP_HOSTNAME_DIR}"' EXIT

cp $SERVICE_FILES_DIR/$SERVICE_NAME $TMP_HOSTNAME_DIR
if [ $? -ne 0 ]; then
	echo "Can't copy service file to temporary dir" >&2
	exit 254
fi

EXECSCRIPT="./o365_mu_users_export_process.pl"

if [ ! -f "$EXECSCRIPT" ]; then
	echo "Can't locate process script!" >&2
	exit 253
fi

$EXECSCRIPT -d $DBNAME -p $TMP_HOSTNAME_DIR -s $SERVICE_NAME

ERRORCODE=$?
if [ $ERRORCODE -ne 0 ]; then
	echo "Process exit with error" >&2
	exit $ERRORCODE
fi

ERR_CODE=$?

if [ $ERR_CODE -ne 0 ]; then
    echo "Slave script ends with return code: $ERR_CODE" >&2
fi

exit $ERR_CODE
