#!/bin/bash

upgrade_software()
{

systemctl stop chirpstack
mkdir -p /tmp/back/postnew /tmp/back/postold /tmp/back/redisnew /tmp/back/redisold

if [[ ! -z $(which docker) ]]; then
    if [[ ! -f /tmp/backup/chirpstack_postgresqldata_backup.tar.gz ]]; then
        postgresqlversion=$(docker images |grep postgre|awk '{print$2}')
        docker run --rm -v chirpstack_postgresqldata:/volume -v /tmp/backup:/backup postgres:$postgresqlversion tar czf /backup/chirpstack_postgresqldata_backup.tar.gz -C /volume . 
    fi

    if [[ ! -f /tmp/backup/chirpstack_redisdata_backup.tar.gz ]]; then
        redisversion=$(docker images |grep redis|awk '{print$2}')
        docker run --rm -v chirpstack_redisdata:/volume -v /tmp/backup:/backup redis:$redisversion tar czf /backup/chirpstack_redisdata_backup.tar.gz -C /volume . 
    fi
fi
# apt update -y 
# apt install postgresql -y
# update&upgrade software
#echo "deb [ arch=armhf ] http://raspbian.raspberrypi.com/raspbian/ bookworm main contrib non-free rpi"  > /etc/apt/sources.list
#echo "deb http://repo.dragino.com/ ms48 main" >> /etc/apt/sources.list
#cp /etc/apt/sources.list /etc/apt/sources.list.bak

#gpg --keyserver keyserver.ubuntu.com --recv-keys 9165938D90FDDD2E > /dev/null 2>&1
#gpg --export 9165938D90FDDD2E | sudo tee /etc/apt/trusted.gpg.d/raspbian.gpg > /dev/null 2>&1

apt update -y

#DEBIAN_FRONTEND=noninteractive apt upgrade -yq \
# -o Dpkg::Options::="--force-confnew"


#apt autoremove -y

#turn off some unnecessary services
if [[ $(systemctl is-enabled sysstat) ]]; then
    systemctl stop sysstat
    systemctl disable sysstat
    rm -rf /var/log/sysstat/  
fi

if [[ -f /etc/cron.d/sysstat  ]]; then
    /etc/cron.d/sysstat 
fi

if [[ -f /etc/cron.daily/sysstat ]]; then
    /etc/cron.daily/sysstat 
fi

#change rootdev path
if [[ ! -z $(cat /boot/armbianEnv.txt|grep UUID) ]]; then
	sed -i '/rootdev=UUID/c\rootdev=/dev/mmcblk2p1' /boot/armbianEnv.txt 
	sync
fi

sync
}

Remove_docker()
{
#Remove docker and docker-chirpstack
if [[ ! -f /etc/chirpstack/chirpstack.toml  ]]; then
    systemctl stop chirpstack 2> /dev/null
    systemctl disable chirpstack 2> /dev/null
    rm /usr/lib/systemd/system/chirpstack.service
fi

if [[ ! -z $(which docker) ]]; then
    docker-compose -f /usr/local/chirpstack/docker-compose.yml down --rmi all
    apt-get  purge $(dpkg -l | grep -i docker | awk '{print $2}') -y
    apt-get autoremove --purge $(dpkg -l | grep -i docker | awk '{print $2}') -y
    rm -rf $(find / -name 'docker')
fi
sync
}

Migrate_chirpstack()
{
#migrate to C-chirpstack
# apt install \
#     mosquitto \
#     mosquitto-clients \
#     redis-server \
#     redis-tools \
#     postgresql-14 -y
# if [[ ! -f /usr/local/chirpstack/postcreate ]]; then
# sudo -u postgres psql <<EOF
# CREATE ROLE chirpstack WITH LOGIN PASSWORD 'chirpstack';
# CREATE DATABASE chirpstack WITH OWNER chirpstack;
# \c chirpstack
# CREATE EXTENSION pg_trgm;
# EOF
# touch /usr/local/chirpstack/postcreate
# fi

wget -P /tmp http://repo.dragino.com/release/patch/ms48/local_packages.tar.gz
tar -zxvf /tmp/local_packages.tar.gz -C /tmp
dpkg -i /tmp/local_packages/*.deb
apt -f install

wget -P /tmp http://repo.dragino.com/release/patch/ms48/python_install.tar.gz
tar xzf /tmp/python_install.tar.gz -C /

PACKAGE_DIR="/usr/local/install_python"
pip install --no-index --find-links="$PACKAGE_DIR" \
    "$PACKAGE_DIR/chirpstack_api-4.10.1.tar.gz" \
    "$PACKAGE_DIR/google_api_core-2.23.0-py3-none-any.whl" \
    "$PACKAGE_DIR/grpcio-1.68.1-cp310-cp310-linux_armv7l.whl" \
    "$PACKAGE_DIR/google_auth-2.36.0-py2.py3-none-any.whl" \
    "$PACKAGE_DIR/googleapis_common_protos-1.66.0-py2.py3-none-any.whl" \
    "$PACKAGE_DIR/proto_plus-1.25.0-py3-none-any.whl" \
    "$PACKAGE_DIR/protobuf-5.29.1-py3-none-any.whl" \
    "$PACKAGE_DIR/requests-2.32.3-py3-none-any.whl" \
    "$PACKAGE_DIR/cachetools-5.5.0-py3-none-any.whl" \
    "$PACKAGE_DIR/certifi-2024.8.30-py3-none-any.whl" \
    "$PACKAGE_DIR/charset_normalizer-3.4.0-py3-none-any.whl" \
    "$PACKAGE_DIR/idna-3.10-py3-none-any.whl" \
    "$PACKAGE_DIR/pyasn1_modules-0.4.1-py3-none-any.whl" \
    "$PACKAGE_DIR/rsa-4.9-py3-none-any.whl" \
    "$PACKAGE_DIR/urllib3-2.2.3-py3-none-any.whl" \
    "$PACKAGE_DIR/pyasn1-0.6.1-py3-none-any.whl" \
    "$PACKAGE_DIR/paho_mqtt-2.1.0-py3-none-any.whl" 


if [[ -f /tmp/backup/chirpstack_postgresqldata_backup.tar.gz ]]; then
    systemctl stop postgresql
    tar xzf /tmp/backup/chirpstack_postgresqldata_backup.tar.gz -C /tmp/back/postold/
    mv /var/lib/postgresql/14/main/ /tmp/back/postnew
    mv /tmp/back/postold/ /var/lib/postgresql/14/main/
    systemctl start postgresql

else
sudo -u postgres psql <<EOF
CREATE ROLE chirpstack WITH LOGIN PASSWORD 'chirpstack';
CREATE DATABASE chirpstack WITH OWNER chirpstack;
\c chirpstack
CREATE EXTENSION pg_trgm;
EOF
fi


if [[ ! -f /etc/chirpstack-mqtt-forwarder/chirpstack-mqtt-forwarder.toml  ]]; then
    systemctl stop chirpstack-mqtt-forwarder
fi

#redis database
if [[ ! -d /var/log/redis  ]]; then
	mkdir /var/log/redis
	chown redis:redis /var/log/redis/
	systemctl restart redis-server
fi

}

update_to_as923()
{
    curl -o /etc/chirpstack/chirpstack.toml http://repo.dragino.com/release/patch/chirpstack.toml.bak
	cat <<EOF >> /etc/chirpstack/region_as923.toml

	[[regions.network.extra_channels]]
	frequency=922200000
	min_dr=0
	max_dr=5
	spreading_factors=[7, 8, 9, 10, 11, 12]

	[[regions.network.extra_channels]]
	frequency=922400000
	min_dr=0
	max_dr=5
	spreading_factors=[7, 8, 9, 10, 11, 12]

	[[regions.network.extra_channels]]
	frequency=922600000
	min_dr=0
	max_dr=5
	spreading_factors=[7, 8, 9, 10, 11, 12]

	[[regions.network.extra_channels]]
	frequency=922800000
	min_dr=0
	max_dr=5
	spreading_factors=[7, 8, 9, 10, 11, 12]

	[[regions.network.extra_channels]]
	frequency=923000000
	min_dr=0
	max_dr=5
	spreading_factors=[7, 8, 9, 10, 11, 12]

	[[regions.network.extra_channels]]
	frequency=922000000
	min_dr=0
	max_dr=5
	spreading_factors=[7, 8, 9, 10, 11, 12]
EOF
    systemctl restart chirpstack
	
	systemctl restart chirpstack-gateway-bridge
	
    #curl -o /etc/chirpstack-mqtt-forwarder/chirpstack-mqtt-forwarder.toml http://repo.dragino.com/release/patch/chirpstack-mqtt-forwarder.toml.bak
    #systemctl restart chirpstack-mqtt-forwarder
}
#Add the database fport column
update_database()
{
	sqlite3 /usr/local/rs485/data.db "ALTER TABLE listening ADD COLUMN fport TEXT;"
}

update_dragino_package()
{
	apt update && apt install dragino* -y
}
check_the_update()
{
	packages=("mosquitto" "mosquitto-clients" "redis-server" "redis-tools" "postgresql")

	# Check whether the software package is successfully installed
	echo "Checking installed packages..."
	for pkg in "${packages[@]}"; do
		if dpkg -l | grep -qw "$pkg"; then
			echo "$pkg is installed."
		else
			echo "$pkg is NOT installed."
		fi
	done
	draginomodbus_version=$(dpkg -l | grep -w draginomodbus | awk '{print $3}')
	draginoui_version=$(dpkg -l | grep -w dragino-ui | awk '{print $3}')
	draginoups_version=$(dpkg -l | grep -w draginoups | awk '{print $3}')
	if [[ "$draginomodbus_version" != "2024-12-26" ]]; then
        echo "draginomodbus is NOT updated"
    fi
	if [[ "$draginoui_version" != "2024-12-26" ]]; then
        echo "dragino-ui is NOT updated"
    fi
	if [[ "$draginoups_version" != "2024-12-20" ]]; then
        echo "draginoups is NOT updated"
    fi
	
}
upgrade_software
Remove_docker
Migrate_chirpstack
update_to_as923
update_database
update_dragino_package
check_the_update
sync