#!/bin/bash

MYSQL_HOST="localhost"
MYSQL_DB="opensim_SC"
MYSQL_USER="opensim_SC"

OS_VER="0.9.0.1"

source scripts/common.sh
getPrgDir

# This should all be safe for pre existing installs that are being updated.

MYSQL_PASSWORD=$1
# Try to get old database credentials if they exist.
if [ -f ${OS_PATH}/config/config.ini ]; then
    # Get the database credentials.
    declare -A creds
    while read -d ';' p; do
	k=$(echo ${p} | cut -d '=' -f 1)
	v=$(echo ${p} | cut -d '=' -f 2)
	creds[${k}]="${v}"
    done < <(sudo grep ConnectionString ${OS_PATH}/config/config.ini | cut -d '"' -f 2)
    # The above seems the best way to get bash to let the creds assignments survive outside the loop.

    MYSQL_HOST="${creds[Data Source]}"
    MYSQL_DB="${creds[Database]}"
    MYSQL_USER="${creds[User ID]}"
    MYSQL_PASSWORD="${creds[Password]}"
fi
if [ -z $MYSQL_PASSWORD ]; then
    MYSQL_PASSWORD="OpenSimSucks${RANDOM}"
fi

USER=$(whoami)

echo "Installing into ${OS_PATH}, as user ${OS_USER} ."
echo "Using MySQL host:${MYSQL_HOST} database:${MYSQL_DB} user:${MYSQL_USER} password:${MYSQL_PASSWORD} ."


echo "Installing and compiling software."
sudo apt install mariadb-server libmariadbclient-dev tmux mono-complete mono-devel nunit uuid-runtime uuid-dev libapache2-mod-fcgid libssl1.0-dev spawn-fcgi
# nant is done separately, coz it was removed from Debian for some mysterious reason.
sudo apt install nant
sudo /etc/init.d/mysql restart


echo "Setting up OpenSim users.  This next prompt asks for your MySQL root users password."
# "create user if not exists" doesn't exist until MySQL 5.7, so we have to put up with a warning, which we can ignore.
# Recent Debian based systems install with a passwordless root account, but it only works if run as the OS root user.
# Otherwise you can't get in.  Yep, the -p seems to still be needed.
sudo mysql -u root -p -h localhost << zzzzEOFzzz
create database if not exists $MYSQL_DB;
create user if not exists '$MYSQL_USER' identified by '$MYSQL_PASSWORD';
create user if not exists '$MYSQL_USER'@localhost identified by '$MYSQL_PASSWORD';
grant all on $MYSQL_DB.* to '$MYSQL_USER';
grant all on $MYSQL_DB.* to '$MYSQL_USER'@localhost;
FLUSH PRIVILEGES;
zzzzEOFzzz

sudo adduser --system --shell /bin/bash --group ${OS_USER}
sudo addgroup ${USER} ${OS_USER}


echo "Setting up OpenSim."
sudo rm -fr   ${OS_PATH}/opensim-SC_*
sudo mkdir -p ${OS_PATH}/opensim-SC_${OS_VER}
sudo cp -fr $PRGDIR/* ${OS_PATH}/opensim-SC_${OS_VER}
cd ${OS_PATH}
if [ ! -h current ]; then
    sudo ln -fs opensim-SC_${OS_VER} current
fi

cd current
for dir in AssetFiles backups caches config db logs
do
    if [ ! -d ../$dir ]; then
	sudo cp -fr example/$dir ..
    fi
done

pushd ../config/ROBUST >/dev/null
sudo ln -fs ../../current/scripts/common.sh common.sh
sudo ln -fs ../../current/scripts/start-sim start-sim
sudo ln -fs ../../current/scripts/start-sim stop-sim
sudo sed -i "s@OS_PATH@${OS_PATH}@g" opensim-monit.conf
popd >/dev/null

sudo cp bin/config-include/config_* ../config/
sudo ln -fs  config_localhost.ini ../config/config.ini
sudo sed -i "s@MYSQL_HOST@${MYSQL_HOST}@g" ../config/config_DG.ini
sudo sed -i "s@MYSQL_DB@${MYSQL_DB}@g" ../config/config_DG.ini
sudo sed -i "s@MYSQL_USER@${MYSQL_USER}@g" ../config/config_DG.ini

sudo sed -i "s@MYSQL_HOST@${MYSQL_HOST}@g" ../config/config_IG.ini
sudo sed -i "s@MYSQL_DB@${MYSQL_DB}@g" ../config/config_IG.ini
sudo sed -i "s@MYSQL_USER@${MYSQL_USER}@g" ../config/config_IG.ini

sudo sed -i "s@MYSQL_HOST@${MYSQL_HOST}@g" ../config/config_MG.ini
sudo sed -i "s@MYSQL_DB@${MYSQL_DB}@g" ../config/config_MG.ini
sudo sed -i "s@MYSQL_USER@${MYSQL_USER}@g" ../config/config_MG.ini

sudo sed -i "s@MYSQL_HOST@${MYSQL_HOST}@g" ../config/config_localhost.ini
sudo sed -i "s@MYSQL_DB@${MYSQL_DB}@g" ../config/config_localhost.ini
sudo sed -i "s@MYSQL_USER@${MYSQL_USER}@g" ../config/config_localhost.ini

sudo chmod 600 ../config/*.ini
sudo sed -i "s@MYSQL_PASSWORD@${MYSQL_PASSWORD}@g" ../config/config_DG.ini
sudo sed -i "s@MYSQL_PASSWORD@${MYSQL_PASSWORD}@g" ../config/config_IG.ini
sudo sed -i "s@MYSQL_PASSWORD@${MYSQL_PASSWORD}@g" ../config/config_MG.ini
sudo sed -i "s@MYSQL_PASSWORD@${MYSQL_PASSWORD}@g" ../config/config_localhost.ini
sudo chmod 600 ../config/*.ini
sudo touch ../config/ROBUST/RobustExtra.ini
sudo chmod 600 ../config/ROBUST/RobustExtra.ini

if [ ! -f /home/${OS_USER}/.tmux.conf ]; then
    sudo cp scripts/install/opensim.tmux.conf /home/${OS_USER}/.tmux.conf
    sudo chown ${OS_USER}:${OS_USR} /home/${OS_USER}/.tmux.conf
    sudo chmod 644 /home/${OS_USER}/.tmux.conf
fi


echo "Building OpenSim."
sudo chown -R ${USER}:${USER} ${OS_PATH} *
./BuildIt.sh


cd scripts/install
sudo chmod a+x secure.sh
sudo ./secure.sh

echo "Done installing OpenSim."