#!/bin/sh

# Copyright (C) since 2006 NTT DATA Corporation
# 
# This program is free software; you can redistribute it and/or
# Modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation, version 2.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details

# bash configuration
SCRIPT_DIR=$(cd $(dirname $0);pwd)
. ${SCRIPT_DIR}/install.cfg || exit -1
. /opt/hinemos/hinemos.cfg

export PROG=`basename $0`
DIR=`dirname $0`
USER=`/usr/bin/whoami`
HOST=`hostname`

########################################
#  Local Variable
########################################

LANGUAGE=$1

########################################
#  Local Message
########################################

# load language file
if [ ! -e ${SCRIPT_DIR}/lib/${LANGUAGE}_uninstall.lng ]
then
	echo "not supported language : ${LANGUAGE}"
	exit -1
fi
. ${SCRIPT_DIR}/lib/${LANGUAGE}_uninstall.lng

########################################
# Function
########################################

function EchoOK()
{
	echo " [OK]"
}

function EchoNG()
{
	echo " [NG]"
}

function Welcome()
{
	if [ -e ${SCRIPT_DIR}/hinemos/_version ]
	then
		VERSION=`cat ${SCRIPT_DIR}/hinemos/_version`
	elif [ -e ${SCRIPT_DIR}/../_version ]
	then
		VERSION=`cat ${SCRIPT_DIR}/../_version`
	else
		VERSION=`UNKNOWN`
	fi
	echo
	echo "-------------------------------------------------------"
	echo "     Uninstaller for Hinemos Manager"
	echo "                             Version ${VERSION}"
	echo
	echo "       Copyright (C) since 2006 NTT DATA Corporation"
	echo "-------------------------------------------------------"
}

function ConfirmInstallation()
{
	echo
	while [ 1 ]
	do
		sleep 0.5 && read -p "${MSG_I001} : " INPUT
		INPUT=${INPUT:-N}
		case ${INPUT} in
			y|Y)
				break
				;;
			n|N)
				echo ${MSG_I003}
				return -1
				;;
			*)
				echo ${MSG_W001}
				;;
		esac
	done
	return 0
}

function CheckEnvironment()
{
	# check user executed
	echo
	echo -n ${MSG_I002} && sleep 0.5
	if [ "x"${USER} != "xroot" ]
	then
		EchoNG
		echo ${MSG_E002} && echo ${MSG_E003}
		return -1
	fi
	EchoOK
	
	# check process
	echo
	echo ${MSG_I010}
	if [ -f ${HINEMOS_JBOSS_PID} ]
	then
		read JBOSS_PID < ${HINEMOS_JBOSS_PID}
		if [ "x"${JBOSS_PID} != "x" ] && [ `ps --no-headers --pid ${JBOSS_PID} e | grep "${JAVA_HOME}/bin/java.*org.jboss.Main" | wc -l` -eq 0 ]
		then
			JBOSS_PID=""
		fi
	fi
	if [ -f ${HINEMOS_PG_PID} ]
	then
		PG_PID=`head -n 1 ${HINEMOS_PG_PID}`
		if [ "x"${PG_PID} != "x" ] && [ `ps --no-headers --pid ${PG_PID} e | grep "${PG}/bin/postgres -D ${PGDATA}" | wc -l` -eq 0 ]
		then
			PG_PID=""
		fi
	fi
	if [ "x${JBOSS_PID}" != "x" ] || [ "x${PG_PID}" != "x" ]
	then
		echo ${MSG_E005}
		return -1
	fi
	
	# check agent existence
	echo
	echo -n ${MSG_I022} && sleep 0.5
	if [ `find /opt -mindepth 1 -maxdepth 1 -type d -path "/opt/hinemos_agent*" | wc -l` -ne 0 ]
	then
		EchoNG
		echo ${MSG_E008} && echo ${MSG_E009}
		return -1
	fi
	EchoOK
	
	return 0
}

function UninstallSyslogNg()
{
	echo
	echo ${MSG_I005} && sleep 0.5
	rpm -q syslog-ng > /dev/null
	if [ $? -ne 0 ]
	then
		echo ${MSG_I006}
		return 0
	fi
	
	while [ 1 ]
	do
		sleep 0.5 && read -p "${MSG_I004} : " INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				break
				;;
			n|N)
				echo ${MSG_W002} && echo ${MSG_W003}
				return 0
				;;
			*)
				echo ${MSG_W001}
				;;
		esac
	done
	
	/sbin/chkconfig --level 2345 syslog-ng off \
		&& /sbin/chkconfig --level 2345 syslog on \
		&& rpm -e syslog-ng libevtlog0
	if [ $? -ne 0 ]
	then
		echo ${MSG_E004}
		return -1
	fi
	echo ${MSG_I007} && echo ${MSG_I008}
	
	return 0
}

function RemoveUser()
{
	echo
	echo ${MSG_I012} && sleep 0.5
	id ${HINEMOS_USER} > /dev/null 2>&1
	if [ $? -ne 0 ]
	then
		echo ${MSG_I013}
		return 0
	fi
	
	while [ 1 ]
	do
		sleep 0.5 && read -p "${MSG_I009} : " INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				break
				;;
			n|N)
				echo ${MSG_W004}
				return 0
				;;
			*)
				echo ${MSG_W001}
				;;
		esac
	done
	
	userdel -r ${HINEMOS_USER}
	if [ $? -ne 0 ]
	then
		echo ${MSG_E006}
		return -1
	fi
	echo ${MSG_I011}
	
	return 0
}

function RemoveFiles()
{
	echo
	echo ${MSG_I014}
	if [ ! -d ${HINEMOS_HOME} ]
	then
		echo ${MSG_I015}
		return 0
	fi
	
	while [ 1 ]
	do
		sleep 0.5 && read -p "${MSG_I016} : " INPUT
		INPUT=${INPUT:-Y}
		case ${INPUT} in
			y|Y)
				break
				;;
			n|N)
				echo ${MSG_W005}
				return 0
				;;
			*)
				echo ${MSG_W001}
				;;
		esac
	done
	
	rm -rf ${HINEMOS_HOME}
	if [ $? -ne 0 ]
	then
		echo ${MSG_E007}
		return -1
	fi
	echo ${MSG_I017}
	
	return 0
}

function DisplayNotice()
{
	echo
	echo ${MSG_I018}
	echo ${MSG_I019}
	echo ${MSG_I020}
}

function SIGINTExit()
{
	echo
	echo "${MSG_E003} (SIGINT)"
	exit -1
}

########################################
# SHELL
########################################

#
# check parameters
#
if [ $# -ne 1 ]; then
	echo ${MSG_E001}
	exit -1
fi

# define trap
trap SIGINTExit 2

# print welcome
Welcome

# confirm installation
ConfirmInstallation || exit -2

# check environment
CheckEnvironment|| exit -3

# uninstall syslog-ng
UninstallSyslogNg

# remove user
RemoveUser

# remove files
RemoveFiles

# display notice
DisplayNotice

echo && echo ${MSG_I021} && echo

exit 0