#!/bin/bash

echo -e "\nupdate script for CubeSatSim v2.1\n"

FLAG=0
checkout=0

if [ -z "$1" ] ; then
	checkout=0
else
	checkout=1
	branch="$1"
	echo -n "changing to branch "
	echo $branch
	FLAG=1
fi

if [ "$1" = "n" ] ; then
	noreboot=1
else
	noreboot=0
fi

# echo "No reboot"
# echo $noreboot

sudo rm /home/pi/CubeSatSim/morse.wav /home/pi/CubeSatSim/id.txt /home/pi/CubeSatSim/cw.txt > /dev/null 2>&1 

if [ "$1" = "u" ]; then

#  sudo apt-get update && sudo apt-get dist-upgrade -y
  sudo apt-get update -y

  sudo apt-get install -y git libasound2-dev i2c-tools build-essential libgd-dev libmagic-dev python3-pip minicom

fi

# sudo apt-get install -y python3-smbus libusb-1.0

sudo sed -i 's/update.sh/update /g' /etc/motd

sudo sed -i 's/installed and/installed\nand/g' /etc/motd

sudo sed -i 's/more information/more\ninformation/g' /etc/motd

sudo sed -i 's/update to/update\nto/g' /etc/motd

sudo sed -i 's/console=tty1 r/console=tty1 maxcpus=1 r/g' /boot/cmdline.txt # single core if Pi Zero 2

sudo sed -i 's/maxcpus=2/maxcpus=1/g' /boot/cmdline.txt # single core if Pi Zero 2

cd /home/pi/CubeSatSim

git pull --no-rebase > .updated

if [ $checkout -eq 1 ]; then
	git checkout $branch	
	git pull --no-rebase > .updated
fi

make debug

FILE=/home/pi/CubeSatSim/command_tx
if [ -f "$FILE" ]; then
    echo "$FILE exists."
else 
    echo "creating $FILE"
    echo "True\n" > /home/pi/CubeSatSim/command_tx
fi

FILE=/home/pi/CubeSatSim/command_count.txt
if [ -f "$FILE" ]; then
    echo "$FILE exists."
else 
    echo "creating $FILE"
    echo "0\n" > /home/pi/CubeSatSim/command_count.txt
fi

if [[ $(diff systemd/cubesatsim.service /etc/systemd/system/cubesatsim.service) ]]; then
  echo "changed cubesatsim.service."
  sudo cp /home/pi/CubeSatSim/systemd/cubesatsim.service /etc/systemd/system/cubesatsim.service
  FLAG=1
else
  echo "no changes to cubesatsim.service."
fi

FILE=/etc/systemd/system/rpitx.service
if [ -f "$FILE" ]; then
  sudo systemctl disable rpitx
  sudo rm /etc/systemd/system/rpitx.service
fi

FILE=/etc/systemd/system/transmit.service
if [ -f "$FILE" ]; then
  if [[ $(diff systemd/transmit.service /etc/systemd/system/transmit.service) ]]; then
    echo "changed transmit.service."
    sudo cp /home/pi/CubeSatSim/systemd/transmit.service /etc/systemd/system/transmit.service
    FLAG=1
  else
    echo "no change to transmit.service."
  fi
else
  echo "creating transmit.service."
  sudo cp /home/pi/CubeSatSim/systemd/transmit.service /etc/systemd/system/transmit.service
  FLAG=1
fi

FILE=/etc/systemd/system/command.service
if [ -f "$FILE" ]; then
  if [[ $(diff systemd/command.service /etc/systemd/system/command.service) ]]; then
    echo "changed command.service."
    sudo cp /home/pi/CubeSatSim/systemd/command.service /etc/systemd/system/command.service
    FLAG=1
  else
    echo "no change to command.service."
  fi
else
  echo "creating command.service."
  sudo cp /home/pi/CubeSatSim/systemd/command.service /etc/systemd/system/command.service
  sudo systemctl enable command
  FLAG=1
fi

FILE=/etc/asound.conf
if [ -f "$FILE" ]; then
  if [[ $(diff /home/pi/CubeSatSim/asound.conf /etc/asound.conf) ]]; then
    echo "changed /etc/asound.conf."
    sudo cp /home/pi/CubeSatSim/asound.conf /etc/asound.conf
    FLAG=1
  else
    echo "no change to /etc/asound.conf."
  fi
else
  echo "creating /etc/asound.conf."
  sudo cp /home/pi/CubeSatSim/asound.conf /etc/asound.conf
  FLAG=1
fi

FILE=/home/pi/CubeSatSim/sstv_image_1_320_x_256.jpg
if [ ! -f "$FILE" ]; then
    echo "Copying SSTV image 1."
    cp /home/pi/CubeSatSim/sstv/sstv_image_1_320_x_256.jpg /home/pi/CubeSatSim/sstv_image_1_320_x_256.jpg
fi
    
FILE=/home/pi/CubeSatSim/sstv_image_2_320_x_256.jpg
if [ ! -f "$FILE" ]; then
    echo "Copying SSTV image 2."
    cp /home/pi/CubeSatSim/sstv/sstv_image_2_320_x_256.jpg /home/pi/CubeSatSim/sstv_image_2_320_x_256.jpg
fi

grep 'update' /home/pi/CubeSatSim/.updated
if [[ $(grep 'update' /home/pi/CubeSatSim/.updated) ]]; then
  echo "update script updated, running again"
  /home/pi/CubeSatSim/update
fi

if [ ! -d "/home/pi/PiSSTVpp" ]; then

#  sudo apt-get update && sudo apt-get dist-upgrade -y
  sudo apt-get update -y

  sudo apt-get install -y python-picamera python3-picamera build-essential libgd-dev libmagic-dev


  cd

  git clone https://github.com/alanbjohnston/PiSSTVpp.git

  cd PiSSTVpp

  make pisstvpp

  cd
  
  
  sudo raspi-config nonint do_camera 0
  

  FILE=/home/pi/CubeSatSim/sstv_image_1_320_x_256.jpg
  if [ ! -f "$FILE" ]; then
      echo "Copying SSTV image 1."
      cp /home/pi/CubeSatSim/sstv/sstv_image_1_320_x_256.jpg /home/pi/CubeSatSim/sstv_image_1_320_x_256.jpg
  fi

  FILE=/home/pi/CubeSatSim/sstv_image_2_320_x_256.jpg
  if [ ! -f "$FILE" ]; then
      echo "Copying SSTV image 2."
      cp /home/pi/CubeSatSim/sstv/sstv_image_2_320_x_256.jpg /home/pi/CubeSatSim/sstv_image_2_320_x_256.jpg
  fi
  
#  echo "You need to reboot to complete this update.  Reboot now (y/n)?"

#  read -r ANS

#  if [ "$ANS" = "y" ]; then

#    sudo reboot now

#  else

#    echo "The CubeSatSim software may not work correctly until you reboot."

#  fi 
  
fi

if [ ! -d "/home/pi/rpitx" ]; then

	cd
	git clone https://github.com/alanbjohnston/rpitx.git
	cd rpitx
	./install.sh
	cd
else

	if [[ $(grep 'SYNCWITHPWM'  /home/pi/rpitx/src/librpitx/src/fskburst.h) ]]; then
	    echo "rpitx library already updated"
	else
	    echo "updating rpitx"
	    cd  /home/pi/rpitx
	    git pull
	    ./update.sh
	    cd
	fi
fi

if [ ! -d "/home/pi/WiringPi" ]; then

  cd

  git clone https://github.com/PinkFreud/WiringPi
  cd WiringPi
  ./build debian

  sudo dpkg -i debian-template/wiringpi-2.61-1.deb

  cd

  cd CubeSatSim
  make debug

  FLAG=1

  cd

fi

if [ ! -d "/home/pi/ssdv" ]; then

	echo "Installing SSDV for FUNcube mode"
	cd
	git clone https://github.com/alanbjohnston/ssdv.git  # install ssdv for FUNcube images
	cd ssdv
	make
	cd
	FLAG=1
fi

if [ ! -d "/home/pi/fctelem" ]; then
	echo "Installing fctelem binary v0.2 for FUNcube mode"
	cd
	mkdir /home/pi/fctelem
	mkdir /home/pi/fctelem/public_html
	cd fctelem
	wget https://github.com/alanbjohnston/go/releases/download/v0.2/fctelem.zip
	unzip fctelem.zip
	FLAG=1
elif [ ! -f "/home/pi/fctelem/v0.2" ]; then
	echo "Updating fctelem binary to version v0.2 for FUNcube mode"
	cd
	cd /home/pi/fctelem
	sudo mv fctelem fctelem.bk
	sudo mv fcdecode.conf fcdecode.conf.bk
	sudo mv fctelem.zip fctelem.zip.1
	wget https://github.com/alanbjohnston/go/releases/download/v0.2/fctelem.zip
	unzip fctelem.zip
	FLAG=1
fi

if [ ! -f "/home/pi/fcdctl/fcdctl" ]; then
	echo "Installing fcdctl to set FUNcubeDongle Pro gain"
	sudo rm /var/lib/dpkg/info/python3-pip.list
	sudo apt install python3-pip --reinstall
	sudo apt-get install -y python3-smbus libusb-1.0 -y
	cd
	git clone https://github.com/csete/fcdctl.git
	cd fcdctl
	make fcdpp
fi

cd /home/pi/pi-power-button

  git checkout master

  git pull --no-rebase > .updated_p

  grep 'changed' /home/pi/pi-power-button/.updated_p
  if [[ $(grep 'changed' /home/pi/pi-power-button/.updated_p) ]]; then
  
    echo "updating pi-power-button."

#    git checkout master
    
    script/install

    FLAG=1

  else
    echo "nothing to do for pi-power-button."
  fi 

cd /home/pi/ssdv

  git checkout master

  git pull --no-rebase > .updated_p

  grep 'changed' /home/pi/ssdv/.updated_p
  if [[ $(grep 'changed' /home/pi/ssdv/.updated_p) ]]; then
  
    echo "updating ssdv."

#    git checkout master
    
    script/install

    FLAG=1

  else
    echo "nothing to do for ssdv."
  fi 


  if [[ $(grep 'dtparam=audio=on' /boot/config.txt) ]]; then
    echo "dtparam=audio=on already in /boot/config.txt"
  else
    echo "adding dtparam=audio=on to /boot/config.txt"
    sudo sh -c 'echo "\ndtparam=audio=on" >> /boot/config.txt'
    FLAG=1
  fi

  if [[ $(grep 'dtoverlay=audremap,enable_jack=on' /boot/config.txt) ]]; then
    echo "dtoverlay=audremap,enable_jack=on already in /boot/config.txt"
  else
    echo "adding dtoverlay=audremap,enable_jack=on to /boot/config.txt"
    sudo sh -c 'echo "\ndtoverlay=audremap,enable_jack=on" >> /boot/config.txt'
    FLAG=1
  fi

  if [[ $(grep 'dtoverlay=pwm,pin=18,func=2' /boot/config.txt) ]]; then
    echo "dtoverlay=pwm,pin=18,func=2 already in /boot/config.txt"
  else
    echo "adding dtoverlay=pwm,pin=18,func=2 to /boot/config.txt"
    sudo sh -c 'echo "\ndtoverlay=pwm,pin=18,func=2" >> /boot/config.txt'
    FLAG=1

    cd /home/pi/pi-power-button
    git pull --no-rebase
    git checkout reboot-mode-change
    script/install

#    sudo apt-get update && sudo apt-get dist-upgrade -y
    sudo apt-get update -y
    sudo apt-get install -y libjpeg-dev zlib1g-dev libfreetype6-dev liblcms1-dev libopenjp2-7 libtiff5 python3-pil
    sudo pip3 install adafruit-blinka RPI.GPIO adafruit-extended-bus adafruit-circuitpython-ina219 pillow

  fi

  if [[ $(grep 'disable_splash=1' /boot/config.txt) ]]; then
    echo "disable_splash=1 already in /boot/config.txt"
  else
    echo "adding  to /boot/config.txt"
    sudo sh -c 'echo "\ndisable_splash=1" >> /boot/config.txt'
    FLAG=1
  fi

  if [[ $(grep 'boot_delay=0' /boot/config.txt) ]]; then
    echo "boot_delay=0 already in /boot/config.txt"
  else
    echo "adding  to /boot/config.txt"
    sudo sh -c 'echo "\nboot_delay=0" >> /boot/config.txt'
    FLAG=1
  fi

  if ! grep -q force_turbo=1 /boot/config.txt ; then 
    sudo sh -c 'echo "force_turbo=1" >> /boot/config.txt' 
    FLAG=1
  fi

#if [ ! -f "/home/pi/CubeSatSim/telem_string.txt" ]; then

#  sudo apt-get update && sudo apt-get dist-upgrade -y

#  sudo apt-get install -y libjpeg-dev zlib1g-dev libfreetype6-dev liblcms1-dev libopenjp2-7 libtiff5 -y

#  sudo pip3 install pillow

#fi

changed=0
value=`cat /home/pi/CubeSatSim/sim.cfg`
# echo "$value"
echo "$value" > /dev/null
set -- $value

if [ -z "$1" ] ; then n1="AMSAT" ; changed=1 ; else n1=$1 ; fi # callsign
if [ -z "$2" ] ; then n2="0" ; changed=1 ; else n2=$2 ; fi # reset count
if [ -z "$3" ] ; then n3="0" ; changed=1 ; else n3=$3 ; fi # lat
if [ -z "$4" ] ; then n4="0" ; changed=1 ; else n4=$4 ; fi # lon
if [ -z "$5" ] ; then n5="no" ; changed=1 ; else n5=$5 ; fi # sim mode
if [ -z "$6" ] ; then n6="3" ; changed=1 ; else n6=$6 ; fi # squelch
if [ -z "$7" ] ; then n7="434.9000" ; changed=1 ; else n7=$7 ; fi # transmit frequency
if [ -z "$8" ] ; then n8="435.0000" ; changed=1 ; else n8=$8 ; fi # receive frequency
if [ -z "$9" ] ; then n9="no" ; changed=1 ; else n9=$9 ; fi # hab mode
if [ -z "${10}" ] ; then m1="0" ; changed=1 ; else m1=${10} ; fi # rx pl code 
if [ -z "${11}" ] ; then m2="0" ; changed=1 ; else m2=${11} ; fi # tx pl code

if [ $changed -eq 1 ]; then
	echo -e "Current sim.cfg configuration file:"	
	echo
	echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11}
	echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n"
	echo
	echo $n1 $n2 $n3 $n4 $n5 $n6 $n7 $n8 $n9 $m1 $m2
	echo $n1 $n2 $n3 $n4 $n5 $n6 $n7 $n8 $n9 $m1 $m2 > /home/pi/CubeSatSim/sim.cfg
	echo
fi

if [ "$noreboot" = "0" ] ; then  

	if [ $FLAG -eq 1 ]; then
	  echo "systemctl daemon-reload and reboot"
	  sudo systemctl daemon-reload 
	  sudo reboot -h now
#  sudo  cubesatsim
	else
	  grep 'changed' /home/pi/CubeSatSim/.updated
	  if [[ $(grep 'changed' /home/pi/CubeSatSim/.updated) ]]; then
	    echo "reboot due to code changes " | wall
	    sudo reboot -h now
#    sudo  cubesatsim
	  else
	    echo "nothing to do."
	  fi  
	fi
else
	if [ $FLAG -eq 1 ]; then
		echo "reboot needed for changes to take effect" | wall
	fi
fi

echo "CubeSatSim update complete."
