#!/bin/ksh

#
# medsrvinit	-	Create ImageMedical medsrv user on target
#			Must run in $HOME on the target server
# environment:          HOME variable
#
# parameters:		-batch: do not ask any questions
#

function usage {
    cat <<ENDOFGUSAGE

    Usage: medsrvinit [ [-]-first | [-]-upgrade ]
    
    By default medsrvinit runs in reconfigure mode and starts MEDSRV.
    MEDSRV must be stopped before running this (it's not checked)!

    Parameters:
        -first:   Run extra, first time initialization before 
                  everything else:
                      (Currently nothing. This is a placeholder)
        -upgrade: Run extra, upgrade steps before everything else:
                      - MySQL upgrade, without backup!
                        
    Compatibility:
        - "-batch" parameter is depredicated, but it's effect is default now.
        - Ask for "Practice Builder License Number".: Run instead: 
            ~/component/tools/addlicense.sh
        - Ask for "Reindex Database?": This is depredicated, and did not worked 
            for years. You will not miss it.
ENDOFGUSAGE
}


initmode=''
case x$1 in
	x-first|x--first) # Specifically run first time init steps
		initmode='first'
	;;
	x-upgrade|x--upgrade) 
		initmode='upgrade'
	;;
	x-batch|x--batch) #Now batch mode is default
		echo "This parameter is depredicated!"
		usage; exit 1
	;;
	x) 	# Regular reconfigure + start mode
		initmode=''
	;;
	x*) 
		echo "Invalid parameter!"
		usage; exit 1
	;;
esac

[ ! -e "$HOME/var/conf" ] && mkdir -p "$HOME/var/conf"
[ ! -e "$HOME/tmp" ] && mkdir -p "$HOME/tmp"

. /etc/erad-base/setenv.sh

# Move setenv.sh into ~/var/conf, if it's a file. Symlink it from original.
if [ ! -f $HOME/etc/setenv.sh ]; then
    touch $HOME/var/conf/setenv.sh
    ln -sf $HOME/var/conf/setenv.sh $HOME/etc/setenv.sh
fi

if [ ! -e "$HOME/etc/setenv.sh" ]; then
    $HOME/etc/ctrl shell > $HOME/etc/setenv.sh
    . $HOME/etc/setenv.sh
fi

$HOME/etc/rc config

. $HOME/etc/setenv.sh
. $HOME/etc/func.shi

#
# --- Init settings
#
BASENAME=basename
TAR=tar
GREP=grep
GUNZIP=gunzip
TOUCH=touch
ASROOT=/usr/local/etc/asroot.$USER/asroot


Self=`$BASENAME $0`
LoggerTag=$Self[$$]
export Self LoggerTag

if [ -f "$service_subsys_lockdir/$MED_USER" ]; then
	echo "MEDSRV is already running, or stale subsys lockfile '$service_subsys_lockdir/$MED_USER' exist! " >&2
	echo "Check and clean up lockfile as root!" >&2
	exit 1
fi


# In case of upgrade mode, run mysql_upgrade
if [ "$initmode" == 'upgrade' ]; then
	# Handle remote servers
	if [ -n "$MYSQL_UNIX_PORT" ]; then 
		# Check if mysql database was already initialized
		if [ -d "$MYSQL_DATA/$DBNAME" ]; then
			echo "# >>> mysql_upgrade start >>>"
			$MYSQL_HOME/ctrl start

			Log_ info "Mysql upgrade started."
			if $MYSQL_HOME/bin/mysql_upgrade --password=$MYSQL_ROOT_PW; then
				Log_ info "Mysql upgrade finished."
			else
				Log_ error "Mysql upgrade failed!"
			fi

			$MYSQL_HOME/ctrl stop
			echo "# >>> mysql_upgrade stop >>>"
		else
			echo "Abort: Mysql upgrade impossible: database not yet initialized!"
			Log_ error "Mysql upgrade impossible: database not yet initialized!"
			exit 127
		fi
	else
		echo "Mysql upgrade skipped: it's a remote server!"
		Log_ info "Mysql upgrade skipped: it's a remote server!"
	fi
fi

# Call localconf asroot wrapper, to configure system
echo "# >>> $ASROOT localconf.asr pre-medsrv-init >>>"
$ASROOT localconf.asr pre-medsrv-init
echo

# Generate serverid for new installs
if [ ! -f "$CONF/serverid.cfg" ] ; then
	echo "Generating self ID"
	$DOTCOM_HOME/createselfid.sh
fi

if [ "$initmode" == 'first' ]; then
	# Create/update self.rec with NoObjectTable - does nothing if we are not CWL
	if [ ! -f "$CONF/self.rec" ] ; then
		echo "Creating var/conf/self.rec with NoObjectTable='yes' - does nothing until PorcessMode='Database' is set"
		cat <<-EOFNOOBJTBL >"$CONF/self.rec"
			# Disables object table creation. Only takes effect when ProcessMode is set to 'Database'
			NoObjectTable="yes"
		EOFNOOBJTBL

		if [ ! -f "$CONF/streamserver.conf" ] ; then
			# Configure new installs to create only cw3 images and use it for streaming
			cat <<-EOFSELFREC >>"$CONF/self.rec"

				# Controls what image formats get created during registration/pre-process
				# 23 turns on cw3 image and thumbnail generation and disables other image formats
				CompressionFlags="23"
			EOFSELFREC

			cat <<-EOFSSCONF >>"$CONF/streamserver.conf"
				# Sets the WebViewer to use the streamserver to get data from the server
				UseForWebviewer="true"

				# Sets the image format used by the WebViewer for streaming (raw or cw3)
				StreamingImageFormat="cw3"
			EOFSSCONF
		fi

	else
		found=`cat ~/var/conf/self.rec | grep NoObjectTable`
		if [ -z "$found" ] ; then
			echo "Adding NoObjectTable='yes' to var/conf/self.rec - does nothing until PorcessMode='Database' is set"
			echo "\nNoObjectTable='yes'" >>$CONF/self.rec
		fi
	fi
	
	# For new installs, acknowledging the terms and conditions shall be required by default.
	# filename and content are matching the ones in IMAcknowledgeException.java 
	echo "system='yes'\nwebviewer='yes'" >$CONF/acknowledge.conf
fi

CDIR="$PWD"
cd $HOME

$ETC/ctrl start

mkdir -p $LOG

# Doesn't need if rc config runs at startup
. $ETC/setenv.sh

$ETC/rc start

# I can't find any other reference to imagemed-release
# Is it used anymore? If so, detecting version number
# should use rpm if component.ls does not exist
#cat $HOME/etc/component.ls | grep Version > $HOME/etc/imagemed-release

# Call localconf asroot wrapper, to configure system
echo "# >>> $ASROOT localconf.asr post-medsrv-init >>>"
$ASROOT localconf.asr post-medsrv-init
echo

cd $CDIR

