#!/bin/sh
#
# $Id: mydbgen 41 2004-04-12 08:59:15Z dane $

# Location of the .sql file with the schema
DBSQL="tables.sql"

# Schema Version
SVER="1"

# Local Version, defaults to 0
LVER="0"

TFILE="/tmp/.anopedb.$$"

if [ "`eval echo -n 'a'`" = "-n a" ] ; then
        c="\c"
else
        n="-n"
fi

# Fix for bug 10
for try in HOME/services anope/data ../data data .. .
do
	if [ -f "$try/$DBSQL" ]; then
		DBFILE="$try/$DBSQL"
	fi
done

if [ ! -f "./$DBFILE" ] ; then 
	echo "Error: Required file $DBSQL was not found!";
	exit
fi

echo ""
echo "This script will guide you through the process of configuring your Anope"
echo "installation to make use of MySQL support. This script must be used for both"
echo "new installs as well as for upgrading for users who have a previous version" 
echo "of Anope installed"

while [ -z "$SQLHOST" ] ; do
        echo ""
        echo "What is the hostname of your MySQL server?"
        echo $n "-> $c"
            read cc
        if [ ! -z "$cc" ] ; then
            SQLHOST=$cc
        fi
done

while [ -z "$SQLUSER" ] ; do
        echo ""
        echo "What is your MySQL username?"
        echo $n "-> $c"
            read cc
        if [ ! -z "$cc" ] ; then
            SQLUSER=$cc
        fi
done

OLD_TTY=`stty -g`

echo ""
echo "What is your MySQL password?"
echo $n "-> $c"
stty -echo echonl
read cc
if [ ! -z "$cc" ] ; then
	SQLPASS=$cc
fi
stty $OLD_TTY

mysqlshow -h$SQLHOST -u$SQLUSER -p$SQLPASS >/dev/null 2>&1
if test "$?" = "1" ; then
	echo "Error: Unable to login, verify your login/password and hostname"
	exit
fi

while [ -z "$SQLDB" ] ; do
        echo ""
        echo "What is the name of the Anope SQL database?"
        echo $n "-> $c"
            read cc
        if [ ! -z "$cc" ] ; then
            SQLDB=$cc
        fi
done

MYSQLSHOW="mysqlshow -h$SQLHOST -u$SQLUSER -p$SQLPASS $SQLDB"
MYSQL="mysql -h$SQLHOST -u$SQLUSER -p$SQLPASS $SQLDB"

echo ""

$MYSQLHOW >/dev/null 2>&1
if test "$?" = "1" ; then
	echo "It appears that database does not exist. Or that you don't have the"
	echo "correct credentials to access it. Please verify that you have entered"
	echo "the correct values."
	exit
fi


res="$($MYSQL -Bs -e "show tables like 'anope_os_core'" | wc -l)"
if test "$res" = "0" ; then
	echo -n "Unable to find Anope schema, creating... "
	mysql -h$SQLHOST -u$SQLUSER -p$SQLPASS $SQLDB < $DBFILE
	if test "$?" = "0" ; then
		echo "done!"
	else
		echo "failed!"
		FAILED="$FAILED 'schema creation'"
	fi
else
	# Introduced on Anope 1.6.0 -> Table anope_info
	res="$($MYSQL -Bs -e "show tables like 'anope_info'" | wc -l)"
	if test "$res" = "0" ; then
		echo -n "Unable to find Anope info table, creating... "
		echo "CREATE TABLE anope_info (version int, date datetime) TYPE=MyISAM" > $TFILE
		mysql -h$SQLHOST -u$SQLUSER -p$SQLPASS $SQLDB < $TFILE >/dev/null 2>&1
		if test "$?" = "0" ; then
			echo "done!"

		else
			echo "failed!"
			FAILED="$FAILED 'anope_info table'"
		fi
	else
		LVER="$($MYSQL -sB -e "select version from anope_info")"
		if test "x$LVER" = "x" ; then
			LVER=0
		fi
	fi

	# Introduced on Anope 1.5.14.5 -> anope_cs_info.memomax
	res="$($MYSQL -Bs -e "describe anope_cs_info memomax" 2> /dev/null | wc -l)"
	if test "$res" = "0" ; then
		echo -n "Unable to find anope_cs_info.memomax, altering... "
		echo "ALTER TABLE anope_cs_info ADD memomax smallint unsigned NOT NULL default 0" > $TFILE
		mysql -h$SQLHOST -u$SQLUSER -p$SQLPASS $SQLDB < $TFILE >/dev/null 2>&1
		if test "$?" = "0" ; then
			echo "done!"

		else
			echo "failed!"
			FAILED="$FAILED 'anope_cs_info.ttb alter'"
		fi
	fi

	# Introduced on Anope 1.5.14.5 -> anope_cs_info.ttb
	res="$($MYSQL -Bs -e "describe anope_cs_info ttb" | wc -l)"
	if test "$res" = "0" ; then
		echo -n "Unable to find anope_cs_info.ttb, altering... "
		echo "ALTER TABLE anope_cs_info ADD ttb smallint NOT NULL default 0" > $TFILE
		mysql -h$SQLHOST -u$SQLUSER -p$SQLPASS $SQLDB < $TFILE >/dev/null 2>&1
		if test "$?" = "0" ; then
			echo "done!"

		else
			echo "failed!"
			FAILED="$FAILED 'anope_cs_info.ttb alter'"
		fi
	fi


fi

# Insert initial version number. This will have to be redesigned for 1.7
if [ $LVER -ne $SVER ]; then
echo -n "Inserting initial version number... "
$MYSQL -Bs -e "delete from anope_info"
echo "INSERT INTO anope_info (version, date) VALUES ($SVER, now())" > $TFILE
$MYSQL < $TFILE >/dev/null 2>&1
if test "$?" = "0" ; then
	echo "done!"
else
	echo "failed!"
	FAILED="$FAILED 'version insert'"
fi
fi

rm -f $TFILE
if test "x$FAILED" = "x" ; then
	# Try to find out more about this installation
	SQLSOCK="$(mysql_config --socket 2> /dev/null)"
	SQLPORT="$(mysql_config --port 2> /dev/null)"
	echo ""
	echo "Your MySQL setup is complete and your Anope schema is up to date. Make"
	echo "sure you configure MySQL on your services.conf file prior to launching"
	echo "Anope with MySQL support. Your configuration values are:"
	echo ""
	echo "MysqlHost \"$SQLHOST\""
	echo "MysqlUser \"$SQLUSER\""
	echo "MysqlPass \"$SQLPASS\""
	echo "MysqlName \"$SQLDB\""
	echo "MysqlSock \"$SQLSOCK\""
	echo "MysqlPort \"$SQLPORT\""
	echo ""
else
	echo "The following operations failed:"
	echo "$FAILED"
fi

exit
