#! /bin/sh -efu

#
# Moodle MySQL tools
#
# @package   mt-MySQL
# @copyright 2012 Aleksey Avdeev <solo@altlinux.ru>
# @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v2 or later
#

PROG="${0##*/}"

PATH="/usr/sbin:$PATH"

basedbname='moodle'
dbname=
dbuser='moodleuser'
dbpass=''
setpass=
dbrootforce=
dbmoodleuser=
facilitie='MySQL-server'
dbnograntstatus='nograntnonet'
dbrootoption="--host=localhost --user=root"

origindbrootpass=

. shell-error

TEMP=`getopt -n "$PROG" -o b:,d:,u:,p:,m,f -l basedbname:,dbname:,dbuser:,dbpass:,dbmoodleuser,dbrootforce -- "$@"`
eval set -- "$TEMP"

while :; do
	case "$1" in
		--)
			shift
			break
			;;
		-b|--basedbname)
			shift
			basedbname="$1"
			;;
		-d|--dbname)
			shift
			dbname="$1"
			;;
		-u|--dbuser)
			shift
			dbuser="$1"
			;;
		-p|--dbpass)
			shift
			dbpass="$1"
			setpass='yes'
			;;
		-m|--dbmoodleuser)
			dbmoodleuser='yes'
			;;
		-f|--dbrootforce)
			dbrootforce='yes'
			;;
		*) fatal "Unrecognized option: $1"
			;;
	esac
	shift
done

removedbrootpass()
{
	control-dump $facilitie || fatal "Error: control-dump $facilitie"
	control $facilitie $dbnograntstatus || fatal "Error: control $facilitie $dbnograntstatus"
	service mysqld restart
	sleep 1

	if origindbrootpass=`echo "
SELECT Password
FROM user
WHERE host='localhost'
	AND user='root'
LIMIT 1;
" \
	| mysql mysql \
	| grep -v '^\(Password[[:space:]]*\)\?$'`; then

		echo "
UPDATE user
SET Password = ''
WHERE host='localhost'
	AND user='root';
" \
		| mysql mysql
	fi

	control-restore $facilitie
	service mysqld restart
	sleep 1
}

restoredbrootpass()
{
	if [ -n "$origindbrootpass" ]; then
		echo "
UPDATE user
SET Password = '$origindbrootpass'
WHERE host='localhost'
	AND user='root';

FLUSH PRIVILEGES;
" \
		| mysql $dbrootoption mysql
	fi
}

if [ -n "$dbrootforce" ]; then
	dboption="$dbrootoption"
	removedbrootpass >/dev/null
elif [ -n "$dbmoodleuser" ]; then
	dboption="--host=localhost --user=$dbuser ${setpass:+--password='$dbpass'}"
else
	dboption="$@"
fi

if [ -z "$dbname"]; then
	dbname=`mt-MySQL-newdbname --basedbname="$basedbname" -- $dboption`
fi

if ! mt-MySQL-checkdb --dbname "$dbname" -- $dboption >/dev/null; then
	mt-MySQL-createdb --dbname "$dbname" -- $dboption >/dev/null

	mt-MySQL-checkdb --dbname "$dbname" -- $dboption >/dev/null || fatal "No create db: $dbname"
fi

mt-MySQL-setdbuser --dbname "$dbname" --dbuser="$dbuser" ${setpass:+--dbpass="$dbpass"} -- $dboption >/dev/null

if [ -n "$dbrootforce" ]; then
	restoredbrootpass >/dev/null
fi

printf '%s\n' $dbname
