#!/bin/bash

if test -f /opt/ardi/web/sites/default/config/dbsettings.php; then
  echo "Starting Universal ARDI Upgrade"
else
  echo "Starting Universal ARDI Installation"
fi
export DEBIAN_FRONTEND=noninteractive

basefolder=http://repo.optrix.com.au/linux/beta

webuser="www-data"
apacheconfdir="/etc/apache2/conf.d"
pythonlibfolder="/usr/lib/python$2"
pythondir="python3"
apacheservice="apache2"
source config.sh

mkdir /opt/ardi

phpver=$1
pythonver=$2

echo "Additional Python Modules"
pip3 install pytz --break-system-packages
pip3 install requests twisted tzlocal xmltodict xml2dict --break-system-packages 
pip3 install python-daemon pandas mysql.connector --break-system-packages &>>install.log
pip3 install numpy matplotlib --break-system-packages &>>install.log
#pip3 install twisted
#pip3 install xmltodict
#pip3 install xml2dict
#pip3 install python-daemon
#pip3 install pandas
#pip3 install mysql.connector

echo "Downloading Web Content"
wget $basefolder/ardi_web.zip -q -O web.zip
echo "Installing Web Content"
mkdir /opt/ardi/web
unzip -q -o web.zip -d /opt/ardi/web
rm web.zip

echo "Installing Driver Infrastructure"
wget $basefolder/ardi_drivers.zip -q -O drivers.zip
mkdir /opt/ardi/drivers
unzip -q -o drivers.zip -d /opt/ardi/drivers
rm drivers.zip

dos2unix /opt/ardi/drivers/linux/servicer.py &>>install.log
dos2unix /opt/ardi/drivers/linux/daemon.py &>>install.log
dos2unix /opt/ardi/drivers/linux/init &>>install.log
dos2unix /opt/ardi/drivers/linux/systemd.service &>>install.log

echo "Installing Service Infrastructure"
wget $basefolder/ardi_services.zip -q -O services.zip
mkdir /opt/ardi/srv
unzip -q -o services.zip -d /opt/ardi/srv
rm services.zip

cp -r /opt/ardi/srv/consolidator/ardiconsolidators.py /opt/ardi/srv/consolidator/ardiconsolidators
rm -r /opt/ardi/srv/consolidator/ardiconsolidators.py

chmod ug+x /opt/ardi/srv/consolidator/ardiconsolidators
dos2unix /opt/ardi/srv/consolidator/ardiconsolidators
sed -i 's/bin\/python/bin\/python3/g' /opt/ardi/srv/consolidator/ardiconsolidators

mv /opt/ardi/srv/alarmmanager/alarminstaller.py /opt/ardi/srv/alarmmanager/alarminstaller
#mv /opt/ardi/srv/alarmmanager/alarmmanager.py /opt/ardi/srv/alarmmanager/alarmmanager
chmod ug+x /opt/ardi/srv/alarmmanager/alarminstaller
chmod ug+x /opt/ardi/srv/alarmmanager/alarmmanager.py
dos2unix /opt/ardi/srv/alarmmanager/alarmmanager.py
dos2unix /opt/ardi/srv/alarmmanager/alarminstaller

cp -r /opt/ardi/srv/consolidator/ardiconsol.py /opt/ardi/srv/consolidator/ardiconsol
rm -r /opt/ardi/srv/consolidator/ardiconsol.py

chmod ug+x /opt/ardi/srv/consolidator/ardiconsol
dos2unix /opt/ardi/srv/consolidator/ardiconsol
sed -i 's/bin\/python/bin\/python3/g' /opt/ardi/srv/consolidator/ardiconsol

cp -R /opt/ardi/srv/consolidator/twisted "$pythonlibfolder"/

echo "Installing Python Libraries"
wget $basefolder/ardi_pythonlibs.zip -q -O pythonlib.zip
mkdir /usr/lib/python"$phpver"/ardi
unzip -q -o pythonlib.zip -d "$pythonlibfolder"/ardi
rm pythonlib.zip

echo "Installing Standard Drivers Libraries"
wget $basefolder/ardi_stddrivers.zip -q -O stdrivers.zip
unzip -q -o stdrivers.zip -d /opt/ardi/
rm stdrivers.zip

echo "Installing Linux-Specific Config"
wget $basefolder/ardi_linux.zip -q -O linux.zip
mkdir config
unzip -q -o linux.zip -d config
rm linux.zip
mv config/ardi.logrotate /etc/logrotate.d/ardi
mv config/ardimod /usr/bin/ardimod
chown ug+x /usr/bin/ardimod

echo "Installing Linux-Specific Scripts"
wget $basefolder/ardi_scripts.zip -q -O scripts.zip
mkdir /opt/ardi
unzip -q -o scripts.zip -d /opt/ardi
rm scripts.zip

service mysqld start
service mariadb start

echo "Importing Initial MySQL Database"
read -p 'MySQL Server (blank for localhost): ' msqlserver
read -p 'MySQL Username (blank for root): ' msqluser
read -p 'MySQL Password: ' msqlpass
read -p 'MySQL Database (blank for ardi): ' msqldb

msqlserver=${msqlserver:-localhost}
msqluser=${msqluser:-root}
msqlpass=${msqlpass:-}
msqldb=${msqldb:-ardi}

if mysql -u$msqluser -P "$msqlpass" -e "use $msqldb";
then
   echo "MySQL Database Already Exists"
else
   echo "Importing MySQL Database"
   sed -i 's/CREATE DATABASE ardi;/CREATE DATABASE '"$msqldb"';/gI' config/db.sql
   sed -i 's/USE ardi;/USE '"$msqldb"';/gI' config/db.sql
   sed -i "s/PASSWORD('123qwe');/PASSWORD('$msqlpass');/gI" config/init.sql
   mysql -u $msqluser < config/db.sql
   #mysql -u $mssqluser < config/init.sql
fi

if test -f /opt/ardi/web/sites/default/config/dbsettings.php; then
   echo "Upgrade Installation - Initial Files Not Required"
else
   echo "Copying Initial Files"
   cp config/dbsettings.php /opt/ardi/web/sites/default/config
   cp config/auth.php /opt/ardi/web/sites/default/config
   cp config/settings.ini /opt/ardi/web/sites/default/config
   cp config/config.php /opt/ardi/web/sites/default/config
fi

cp -r config/LICENSE /opt/ardi/web/LICENSE

echo "Setting Permissions"
cp -r /opt/ardi/drivers/ardidrivers.py /opt/ardi/drivers/ardidrivers
cp -r /opt/ardi/drivers/ardiinstdrv.py /opt/ardi/drivers/ardiinstdrv
cp -r /opt/ardi/drivers/ardirmdrv.py /opt/ardi/drivers/ardirmdrv
cp -r /opt/ardi/drivers/upgrade.py /opt/ardi/drivers/upgrade
cp -r /opt/ardi/drivers/launcher.py /opt/ardi/drivers/launcher

rm /opt/ardi/drivers/*.py

dos2unix /opt/ardi/drivers/ardidrivers &>>install.log
dos2unix /opt/ardi/drivers/ardiinstdrv &>>install.log
dos2unix /opt/ardi/drivers/ardirmdrv &>>install.log
dos2unix /opt/ardi/drivers/launcher &>>install.log
dos2unix /opt/ardi/drivers/upgrade &>>install.log

#sed -i 's/bin\/python/bin\/python3/g' /opt/ardi/drivers/upgrade
#sed -i 's/bin\/python/bin\/python3/g' /opt/ardi/drivers/ardidrivers
#sed -i 's/bin\/python/bin\/python3/g' /opt/ardi/drivers/ardirmdrv
#sed -i 's/bin\/python/bin\/python3/g' /opt/ardi/drivers/launcher
#sed -i 's/bin\/python/bin\/python3/g' /opt/ardi/drivers/ardiinstdrv

chown root:"$webuser" /opt/ardi/drivers/ardidrivers
chown root:"$webuser" /opt/ardi/drivers/ardiinstdrv
chown root:"$webuser" /opt/ardi/drivers/ardirmdrv
chown root:"$webuser" /opt/ardi/drivers/upgrade
chown root:"$webuser" /opt/ardi/drivers/launcher

mkdir /opt/ardi/drivers/event
chmod ug+x /opt/ardi/drivers/ardidrivers
chmod ug+x /opt/ardi/drivers/ardiinstdrv
chmod ug+x /opt/ardi/drivers/ardirmdrv
chmod ug+x /opt/ardi/drivers/launcher
chmod ug+x /opt/ardi/drivers/upgrade
chmod ug+x /opt/ardi/drivers/live
chmod ug+x /opt/ardi/drivers/hist
chmod ug+x /opt/ardi/drivers/event

chmod u+s /opt/ardi/drivers/ardidrivers
chmod u+s /opt/ardi/drivers/ardiinstdrv
chmod u+s /opt/ardi/drivers/ardirmdrv
chmod u+s /opt/ardi/drivers/launcher
chmod u+s /opt/ardi/drivers/upgrade

chown :"$webuser" -R /opt/ardi/web
chmod g+r -R /opt/ardi/web
chmod g+rwX -R /opt/ardi/web/sites

mkdir /opt/ardi/web/tmp
chmod -R g+rw /opt/ardi/web/tmp
chown :"$webuser" /opt/ardi/web/tmp

mkdir /opt/ardi/tmp
chmod -R g+rw /opt/ardi/tmp
chown :"$webuser" /opt/ardi/tmp
    
if [ ! -f /opt/ardi/web/install/license.txt ]; then   
   touch /opt/ardi/web/install/license.txt
fi

chown :"$webuser" /opt/ardi/web/install/license.txt
chmod g+rw /opt/ardi/web/install/license.txt

mkdir /var/log/ardi
chown :"$webuser" /var/log/ardi
chmod g+rw /var/log/ardi

cp config/100-ardi-drivers /etc/sudoers.d/100-ardi-drivers
chown root:root /etc/sudoers.d/100-ardi-drivers
sed -i 's/www-data/'"$webuser"'/g' /etc/sudoers.d/100-ardi-drivers
chmod 440 /etc/sudoers.d/100-ardi-drivers

chmod -R g+rX /opt/ardi/web/addons
chmod -R g+rX /opt/ardi/web/data

echo "Configuring Default Database"

sed -i 's/dbuser = "root";/dbuser = "'"$msqluser"'";/g' /opt/ardi/web/sites/default/config/dbsettings.php
sed -i 's/dbpass = "";/dbpass = "'"$msqlpass"'";/g' /opt/ardi/web/sites/default/config/dbsettings.php
sed -i 's/dbserver = "";/dbserver = "'"$msqlserver"'";/g' /opt/ardi/web/sites/default/config/dbsettings.php
sed -i 's/dbname = "";/dbname = "'"$msqldb"'";/g' /opt/ardi/web/sites/default/config/dbsettings.php
    
#mv /opt/ardi/web/htaccess /opt/ardi/web/.htaccess

#cp /usr/bin/python3 /usr/bin/python

#echo "Installing SUDO for Web Services"
#cp config/ardi-sudoers.conf /etc/sudoers.d/900-ardi.conf

echo "Changing Web Root"
cp config/ardi-vhost.conf "$apacheconfdir"/ardi.conf
a2ensite ardi &>>install.log
a2dissite 000-default &>>install.log
a2enmod rewrite &>>install.log
a2enmod ssl &>>install.log

echo "Copying Default SSL Files"
mv config/ssl /opt/ardi/
chown -R :www-data /opt/ardi/ssl
chmod -R ug+rw /opt/ardi/ssl

echo "Storing Preferred Python Version"
export ARDIPythonPath="$pythondir"
grep -q ARDIPythonPath /etc/environment || echo 'ARDIPythonPath="'"$pythondir"'"' >> /etc/environment
ln -s "$pythondir" /usr/bin/ardipython

echo "Starting Driver(s)"
/opt/ardi/drivers/upgrade &>>install.log

service "$apacheservice" reload
systemctl reload "$apacheservice"

echo "Installation Complete!"