#!/bin/sh
#
# Copyright (C) 2021 Axel Müller <axel.mueller@avanux.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#

set -x

CONFIG_FILE=/usr/local/etc/install.config
. $CONFIG_FILE

if [ "$INSTALL_MBUSD" = true ] ; then
  PACKAGES="$PACKAGES git cmake"
fi
if [ "$INSTALL_WEBMIN" = true ] ; then
  PACKAGES="$PACKAGES libnet-ssleay-perl libio-pty-perl libauthen-pam-perl perl-openssl-abi-3"
fi
if [ -n "$WIFI_SSID" ] ; then
  IP_ADDRESS=`ip addr | grep wlan0 | grep inet | awk '{print $2}' | awk -F '/' '{print $1}'`
  echo "IP_ADDRESS=$IP_ADDRESS" >> $LOG
fi

echo "$PREFIX Waiting before updating the software catalog ..." >> $LOG
sleep 30

echo "$PREFIX Update software catalog ..." >> $LOG
apt update 2>&1 >> $LOG

echo "$PREFIX Upgrading system ..." >> $LOG
apt upgrade -y 2>&1 >> $LOG

echo "Allow shared mounts by udevd (possibly reset by system upgrade) ..."  >> $LOG
# Refer to https://raspberrypi.stackexchange.com/questions/100312/raspberry-4-usbmount-not-working/100375#100375
sed -i 's/PrivateMounts\=yes/PrivateMounts\=no/g' /lib/systemd/system/systemd-udevd.service 2>&1 >> $LOG

echo "$PREFIX Setting time zone ..." >> $LOG
echo $TIMEZONE > /etc/timezone
cat /etc/timezone >> $LOG

echo "$PREFIX Copy zoneinfo ..." >> $LOG
cp /usr/share/zoneinfo/$TIMEZONE /etc/localtime 2>&1 >> $LOG

echo "$PREFIX Install required packages ..." >> $LOG
apt install $PACKAGES -y 2>&1 >> $LOG

echo "$PREFIX Setting up pigpiod ..." >> $LOG
sed -i "s/ExecStart=\/usr\/bin\/pigpiod -l/ExecStart=\/usr\/bin\/pigpiod/g" /lib/systemd/system/pigpiod.service 2>&1 >> $LOG
systemctl start pigpiod 2>&1 >> $LOG
systemctl enable pigpiod 2>&1 >> $LOG

echo "$PREFIX Setting up mosquitto ..." >> $LOG
sed -i "s/persistence true/persistence false/g" /etc/mosquitto/mosquitto.conf 2>&1 >> $LOG
echo "listener 1883" > /etc/mosquitto/conf.d/smartapplianceenabler.conf
echo "allow_anonymous true" >> /etc/mosquitto/conf.d/smartapplianceenabler.conf
systemctl start mosquitto 2>&1 >> $LOG
systemctl enable mosquitto 2>&1 >> $LOG

echo "$PREFIX Setting up user ..." >> $LOG
mkdir $SAE_HOME 2>&1 >> $LOG
groupadd sae 2>&1 >> $LOG
useradd -d $SAE_HOME -c "SmartApplianceEnabler" -g sae -M sae -s /bin/bash 2>&1 >> $LOG
usermod -a -G gpio,sudo sae 2>&1 >> $LOG
(echo $PASSWORD; echo $PASSWORD) | passwd sae 2>&1 >> $LOG
cp /home/pi/.profile $SAE_HOME 2>&1 >> $LOG
cp /home/pi/.bashrc $SAE_HOME 2>&1 >> $LOG

echo "$PREFIX Installing SAE ..." >> $LOG
wget https://github.com/camueller/SmartApplianceEnabler/raw/master/run/smartapplianceenabler -P $SAE_HOME 2>>$LOG
chmod 755 $SAE_HOME/smartapplianceenabler 2>&1 >> $LOG

wget https://github.com/camueller/SmartApplianceEnabler/raw/master/run/etc/default/smartapplianceenabler -P /etc/default 2>>$LOG
chown root.root /etc/default/smartapplianceenabler 2>&1 >> $LOG
chmod 644 /etc/default/smartapplianceenabler 2>&1 >> $LOG
if [ -n "$IP_ADDRESS" ] ; then
  sed -i "s/#JAVA_OPTS=...JAVA_OPTS. -Dserver.address=.*$/JAVA_OPTS=\"\${JAVA_OPTS} -Dserver.address=$IP_ADDRESS\"/g" /etc/default/smartapplianceenabler
fi

wget https://github.com/camueller/SmartApplianceEnabler/raw/master/run/logback-spring.xml -P $SAE_HOME 2>>$LOG
chmod 644 $SAE_HOME/logback-spring.xml 2>&1 >> $LOG

SAE_VERSION=`curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/camueller/SmartApplianceEnabler/releases | jq -c '.[] | select( .prerelease == false) | .tag_name' | head -n 1 | tr -d '"'`
wget "https://github.com/camueller/SmartApplianceEnabler/releases/download/"$SAE_VERSION"/SmartApplianceEnabler-"$SAE_VERSION".war" -P $SAE_HOME 2>>$LOG

chown -R sae:sae $SAE_HOME 2>&1 >> $LOG

echo "$PREFIX Configure systemd ..." >> $LOG
wget https://github.com/camueller/SmartApplianceEnabler/raw/master/run/lib/systemd/system/smartapplianceenabler.service -P /lib/systemd/system 2>>$LOG
chown root.root /lib/systemd/system/smartapplianceenabler.service 2>&1 >> $LOG
chmod 755 /lib/systemd/system/smartapplianceenabler.service 2>&1 >> $LOG

systemctl enable smartapplianceenabler 2>&1 >> $LOG
systemctl daemon-reload 2>&1 >> $LOG

echo "$PREFIX Starting SAE ..." >> $LOG
systemctl start smartapplianceenabler 2>&1 >> $LOG
sleep 15
systemctl status smartapplianceenabler >> $LOG

if [ "$INSTALL_WEBMIN" = true ] ; then
  echo "$PREFIX Installing Webmin ..." >> $LOG
  wget "https://sourceforge.net/projects/webadmin/files/webmin/$WEBMIN_VERSION/webmin_"$WEBMIN_VERSION"_all.deb/download" -O /tmp/webmin_"$WEBMIN_VERSION"_all.deb 2>>$LOG
  dpkg -i "/tmp/webmin_"$WEBMIN_VERSION"_all.deb" 2>&1 >> $LOG
  sudo systemctl start webmin >> $LOG
  sleep 15
  sudo systemctl status webmin >> $LOG
fi

if [ "$INSTALL_MBUSD" = true ] ; then
  echo "$PREFIX Installing mbusd ..." >> $LOG
  cd /tmp >> $LOG
  git clone https://github.com/camueller/mbusd.git 2>&1 >> $LOG
  cd mbusd >> $LOG
  mkdir build >> $LOG
  cd build >> $LOG
  cmake -DCMAKE_INSTALL_PREFIX=/usr .. 2>&1 >> $LOG
  make >> $LOG
  make install 2>&1 >> $LOG
  systemctl daemon-reload >> $LOG
  cp /etc/mbusd/mbusd.conf.example /etc/mbusd/mbusd-ttyUSB0.conf >> $LOG
  # systemctl start mbusd@ttyUSB0.service 2>&1 >> $LOG
  # systemctl enable mbusd@ttyUSB0.service 2>&1 >> $LOG
fi

echo "$PREFIX Clean up installation files ..." >> $LOG
rm -v $PARENT_SCRIPT >> $LOG
mv -v $PARENT_SCRIPT_BACKUP $PARENT_SCRIPT  >> $LOG
rm -v  $CONFIG_FILE >> $LOG

echo "$PREFIX $0 finished" >> $LOG
echo 0 > $POWER_LED
sleep 3600
echo 255 > $POWER_LED