#!/bin/sh

alterator_api_version=1
. alterator-sh-functions
po_domain="alterator-moodle-install"

# no args
write_defaults()
{
	mt-install-lsdefaults \
	| sed -n '
		/^fullname\t/p
		/^shortname\t/p
		/^wwwroot\t/p
		/^adminuser\t/p
		/^dbtype\t/p
		/^basedbname\t/p
		/^dbuser\t/p
		/^dbpass\t/p
		' \
	| {
		local fullname=""
		local shortname=""
		local wwwroot=""
		local adminuser=""
		local dbtype=""
		local basedbname=""
		local dbuser=""
		local dbadmin="root"
		local adminpass=""

		local str
		local name
		local var
		while read -r str
		do
			name=`printf "%s" "$str" | sed -nr 's/^([^[:space:]]+)\t.*$/\1/p'`
			var=`printf "%s" "$str" | sed -nr 's/^[^[:space:]]+\t(.*)$/\1/p'`;
			eval $name="\$var"
		done

		write_string_param "fullname" "$fullname"
		write_string_param "shortname" "$shortname"
		write_string_param "wwwroot" "$wwwroot"
		write_string_param "adminuser" "$adminuser"
		write_string_param "dbtype" "$dbtype"
		write_string_param "basedbname" "$basedbname"
		write_string_param "dbuser" "$dbuser"
		write_string_param "adminpass" "$adminpass"
		write_string_param "dbpass" "$dbpass"
	}
}

# no args
write_current_conf()
{
	local configfilename=`mt-install-getactiveconfig`

	if [ -n "$configfilename" ]; then
		write_string_param "config" "$configfilename"
		return 0
	fi
	return 1
}

# no args
list_langs()
{
	local lang=
	local langname=
	mt-install-lslangs \
	| while read -r lang langname
	do
		write_enum_item "$lang" "$langname"
	done
}

# no args
list_dbtypes()
{
	# TODO: use mt-install-lsdbtypes
	write_enum_item "mysqli" "MySQL"
}

# no args
list_configs()
{
	local configfilename=
	local active=
	local wwwroot=
	local dbtype=
	local dbname=
	local dataroot=

	mt-install-lsconfigs --full-path \
	| while read -r configfilename active wwwroot dbtype dbname dataroot
	do
		write_enum_item "$configfilename" "$configfilename"
	done
}

# args: "lang" "dbtype" "fullname" "shortname" "wwwroot" "adminuser" "basedbname" "dbuser" "adminpass" "dbpass" "dbadmin"
configure()
{
	local log_tail=$(( \
	mt-install --lang="$1" \
		   --dbtype="$2" \
		   --fullname="$3" \
		   --shortname="$4" \
		   --wwwroot="$5" \
		   --adminuser="$6" \
		   --basedbname="$7" \
		   --dbuser="$8" \
		   --adminpass="$9" \
		   --dbpass="${10}" \
		   --dbsocket='auto' \
		   --prefix='mdl_' \
		   --dbhost=localhost \
		   --chmod=02770 \
		   --datarootauto \
		   --dbrootforce; \
	echo "($?)" ) 2>&1 | tail -2)
	echo "$log_tail" | grep -q '(0)$' || write_error "$log_tail"
}

# args: config
switch()
{

	local log_tail=$(( mt-install-setconfig "$1"; echo "($?)" ) 2>&1 | tail -2)
	echo "$log_tail" | grep -q '(0)$' || write_error "$log_tail"
}

on_message()
{
    set_locale
    case "$in_action" in
    read)
        case "$in__objects" in
            newconf)
		write_defaults
                ;;
            /)
		write_current_conf
                ;;
        esac
        ;;
    write)
        case "$in__objects" in
	    newconf)
		configure "$in_lang" "$in_dbtype" "$in_fullname" "$in_shortname" "$in_wwwroot" "$in_adminuser" "$in_basedbname" "$in_dbuser" "$in_adminpass" "$in_dbpass"
		;;
            /)
		switch "$in_config"
                ;;
        esac
        ;;
    list)
         case "$in__objects" in
            langs)
                list_langs
                ;;
            dbtypes)
                list_dbtypes
                ;;
            configs)
                list_configs
                ;;
            /)
                ;;
        esac
        ;;
    esac
}

message_loop
