#!/bin/bash
#
# Nyquist C4000 11.0.0.652 Patch 3 update script
#
# (C) Copyright 2026, Bogen Communications LLC. All rights reserved.
#
PRODUCT_NAME=nyquist
PRODUCT_TYPE=c4000
PRODUCT=$PRODUCT_NAME
NYQUIST_RELEASE=11.0.0
NYQUIST_VERSION=$NYQUIST_RELEASE
BOGEN_ROOT=/opt/bogen
VERSION_SRC=$BOGEN_ROOT/version
VERSION_DST=/etc/asterisk/version
NYQUIST_CORE=$BOGEN_ROOT/$PRODUCT
NYQUIST_SCRIPTS=$NYQUIST_CORE/scripts
DATABASE=$BOGEN_ROOT/$PRODUCT/database
DATABASE_SQL=$DATABASE/sql
DATABASE_CORE=$DATABASE_SQL/core
DATABASE_PRODUCT=$DATABASE_SQL/$PRODUCT
UPDATE_LOG=$NYQUIST_CORE/c4000-$NYQUIST_VERSION-patch3-log-$(date +%F-%R).txt
UPDATE_STATUS_LOG=$BOGEN_ROOT/last-update-status.txt

unset LICINFO_DEBUG
export RLM_ACT_TIMEOUT=300
export PATH=/usr/bin:/bin:/sbin/:/usr/sbin:/usr/local/bin

#
# The following { encapsulates output to log file (see last line of script)
#
{

rm -f /usr/lib/sysctl.d/protect-links.conf
echo "fs.protected_regular = 0" > /etc/sysctl.d/99-protect-links.conf
sysctl -w fs.protected_regular=0

# Exit if patch is not for the installed Nyquist release
read -r -d : VERNUM < /etc/asterisk/version
if [ "$VERNUM" != "$NYQUIST_VERSION" ]; then
   if [ "$VERNUM" != "11.0.0" ]; then
      exit 1
   fi
fi

# Copy scripts
cp $NYQUIST_SCRIPTS/nqts /usr/local/bin
cp $NYQUIST_SCRIPTS/check-server-status /usr/local/bin
cp $NYQUIST_SCRIPTS/clock_set /usr/local/bin
cp $NYQUIST_SCRIPTS/weather-alert /usr/local/bin
cp $NYQUIST_SCRIPTS/update-siptrunks-status /usr/local/bin
cp $NYQUIST_SCRIPTS/create-yealink-cfg /usr/local/bin
cp $NYQUIST_SCRIPTS/device-status /usr/local/bin
cp $NYQUIST_SCRIPTS/routine-execute /usr/local/bin

# Copy DB updated device_types and reload into DB
cp -f $DATABASE_SQL/$PRODUCT_TYPE/device_types.sql /var/opt/nyquist/database/sql/nyquist
mysql --user="asterisk" --password="A1B7N0Q0GEN00Z9" asterisk < $DATABASE_SQL/$PRODUCT_TYPE/device_types.sql

# Add training video tables if not already installed (for C4000 activation fix)
if [ "$(/usr/local/bin/check-table -t training_video_links)" = "0" ]; then
  cp -f $DATABASE_CORE/training_video_links.sql /var/opt/nyquist/database/sql/core
  mysql --user="asterisk" --password="A1B7N0Q0GEN00Z9" asterisk < $DATABASE_CORE/training_video_links.sql
  cp -f $DATABASE_CORE/training_video_watched_status.sql /var/opt/nyquist/database/sql/core
  mysql --user="asterisk" --password="A1B7N0Q0GEN00Z9" asterisk < $DATABASE_CORE/training_video_watched_status.sql
  cp -f $DATABASE_PRODUCT/training_video_links.sql /var/opt/nyquist/database/sql/nyquist
  mysql --user="asterisk" --password="A1B7N0Q0GEN00Z9" asterisk < $DATABASE_PRODUCT/training_video_links.sql
fi

# Update Laravel files
cp /opt/bogen/nyquist/root/var/www/html/laravel/app/Http/Controllers/SimplifiedConfigurationController.php /var/www/html/laravel/app/Http/Controllers/SimplifiedConfigurationController.php
cp /opt/bogen/nyquist/root/var/www/html/laravel/app/Http/Controllers/StationController.php /var/www/html/laravel/app/Http/Controllers/StationController.php
cp /opt/bogen/nyquist/root/var/www/html/laravel/public/img/sc_nq_t2100.png /var/www/html/laravel/public/img/sc_nq_t2100.png
cp /opt/bogen/nyquist/root/var/www/html/laravel/public/img/sc_nq_t2100_back.png /var/www/html/laravel/public/img/sc_nq_t2100_back.png
cp /opt/bogen/nyquist/root/var/www/html/laravel/resources/views/simplified_configuration/index.blade.php /var/www/html/laravel/resources/views/simplified_configuration/index.blade.php
cp /opt/bogen/nyquist/root/var/www/html/laravel/resources/views/station/form_create.blade.php /var/www/html/laravel/resources/views/station/form_create.blade.php
cp /opt/bogen/nyquist/root/var/www/html/laravel/resources/views/station/form_edit.blade.php /var/www/html/laravel/resources/views/station/form_edit.blade.php
cp /opt/bogen/nyquist/root/var/www/html/laravel/resources/views/station/index.blade.php /var/www/html/laravel/resources/views/station/index.blade.php

# Copy release notes
cp $BOGEN_ROOT/Release-Notes-11.0.0.652-patch3.txt /srv/tftp
chown www-data:www-data /srv/tftp/Release-Notes-11.0.0.652-patch3.txt
chmod 664 /srv/tftp/Release-Notes-11.0.0.652-patch3.txt

cp -f /opt/bogen/Release-Notes-Firmware_Ver.11.3.5.txt /srv/tftp
chown www-data:www-data /srv/tftp/Release-Notes-Firmware_Ver.11.3.5.txt
chmod 664 /srv/tftp/Release-Notes-Firmware_Ver.11.3.5.txt

#
# Update firmware
#
/usr/local/bin/update-firmware -c -u -s /opt/bogen/nyquist/firmware

VERSTR=$(tr -d '\n' < /etc/asterisk/version)
PATCHSTR=$(echo "$VERSTR" | sed -n 's/.*Patch numbers applied: //p')

# Extract patch list into array
IFS=',' read -r -a PATCHES <<< "$PATCHSTR"

# Add required patches
for p in 2 3; do
    if [[ ! " ${PATCHES[*]} " =~ " $p " ]]; then
        PATCHES+=("$p")
    fi
done

# Sort and dedupe
PATCHES=$(printf "%s\n" "${PATCHES[@]}" | sort -n | uniq | paste -sd "," -)

# Write back
echo "$NYQUIST_VERSION:652 - Patch numbers applied: $PATCHES" > /etc/asterisk/version

echo "Update RLM info"

trycount=1
while [ $trycount -le 5 ]
do
   ARET=$(/usr/local/bin/licinfo -U 2>/dev/null)
   if [ "$ARET" = "0" ]; then
      ((trycount++))
      sleep 15
      /bin/ping -c 1 -W 60 hostedactivation.com > /dev/null 2>&1
   else
		trycount=6
	fi
done

/usr/local/bin/dash-text -r -t NQSW > /dev/null 2>&1
/usr/local/bin/dash-text -D -S Success -t NQSW -m "Nyquist 11.0.0.652 Patch 3 applied" > /dev/null 2>&1

echo "$(date): Nyquist 11.0.0.652 Patch 3 Successful" >> $UPDATE_STATUS_LOG

sync;sync;sync

} > $UPDATE_LOG 2>&1

exit 0
