#!/bin/bash
### BEGIN INIT INFO
# Provides:          clouddird
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: VNC Disclaimer
# Description:       Start, stop or reload clouddird.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
CONFIG=/etc/vncdisclaimer
DAEMON=/usr/share/java/middleware.jar
DESC=clouddird
FLAGS="-c $CONFIG"
NAME=clouddird

if [ -r /etc/default/clouddird ]; then
    . /etc/default/clouddird
fi

test -f $DAEMON || exit 0

set -e

# Configuration
FRACTION=0.6      # Use 60% of total RAM for heap
MIN_XMX_MB=512    # Minimum heap size (MB)
MAX_XMX_MB=8192   # Maximum heap size (MB)
MIN_XMS_MB=512    # Minimum initial heap size (MB)

# Detect OS and get total RAM in MB
if [[ -f /proc/meminfo ]]; then
  TOTAL_RAM_MB=$(grep MemTotal /proc/meminfo | awk '{print $2 / 1024}')
elif command -v sysctl >/dev/null 2>&1; then
  TOTAL_RAM_MB=$(sysctl -n hw.memsize | awk '{print $1 / 1024 / 1024}')
else
  echo "Error: Cannot determine system memory. Unsupported OS."
  exit 1
fi

# Calculate Xmx (heap max)
XMX_MB=$(echo "$TOTAL_RAM_MB * $FRACTION" | bc | cut -d '.' -f 1)
XMX_MB=$(( XMX_MB < MIN_XMX_MB ? MIN_XMX_MB : XMX_MB ))
XMX_MB=$(( XMX_MB > MAX_XMX_MB ? MAX_XMX_MB : XMX_MB ))

# Calculate Xms (initial heap) — same as Xmx for stable performance
XMS_MB=$XMX_MB

# Output configuration
echo "Total RAM: ${TOTAL_RAM_MB} MB"
echo "Setting -Xms: ${XMS_MB}m"
echo "Setting -Xmx: ${XMX_MB}m"

# assert pidfile directory and permissions
if [ "$1" != "stop" ]; then
	if [ -f "$CONFIG" ]; then
		USER=$(grep    -i '^User[[:space:]]'    "$CONFIG" | awk '{print $2}')
		GROUP=$(grep   -i '^Group[[:space:]]'   "$CONFIG" | awk '{print $2}')
		PIDFILE=$(grep -i '^PidFile[[:space:]]' "$CONFIG" | awk '{print $2}' | sed -e 's/"//g')
		PIDDIR=`dirname "$PIDFILE"`
		if [ -n "$PIDDIR" -a "$PIDDIR" != "/var/run" ]; then
			if [ ! -d "$PIDDIR" ]; then
				mkdir "$PIDDIR"
			fi
			if [ "$USER" ]; then
				chown "$USER" "$PIDDIR"
			fi
			if [ "$GROUP" ]; then
				chgrp "$GROUP" "$PIDDIR"
			fi
		fi
	fi
fi

case "$1" in
	start)
		echo -n "Starting $DESC: "
		nohup java -Xms${XMS_MB}m -Xmx${XMX_MB}m -jar /usr/share/java/middleware.jar -c /etc/vncdisclaimer/ 2>&1 > >(logger -t "vnc-disclaimer") &
		echo "$NAME."
	;;
	stop)
		echo -n "Stopping $DESC: "
		PID=`ps -ef | grep java | grep middleware|awk '{print $2}'`
		if [ ! -z "$PID" ]; then
			kill -9 $PID
			echo "Stopped : middleware"
		fi
	;;
	restart)
		echo -n "Restarting $DESC: "
		PID=`ps -ef | grep java | grep middleware|awk '{print $2}'`
                if [ ! -z "$PID" ]; then
                        kill -9 $PID
                        echo "Stopped : middleware"
                fi
		sleep 1
		nohup java -Xms${XMS_MB}m -Xmx${XMX_MB}m -jar /usr/share/java/middleware.jar -c /etc/clouddirectory/ 2>&1 > >(logger -t "clouddird") &
		echo "$NAME."
	;;
	*)
		N=/etc/init.d/$NAME
		echo "Usage: $N {start|stop|restart}" >&2
		exit 1
	;;
esac

exit 0
