#!/bin/bash

#################################################################################################
#
# DMR ID Updater & Wartungsscript
# Autor: 13BF775 (Michael) - freeband.digital
#
# Hinweis:
# Im Dashboard unter MMDVMHost > DMR bitte die ID-Datei auf DMRIds_Local.dat umstellen!
#
#################################################################################################

green="\e[32m"
yellow="\e[33m"
red="\e[31m"
blue="\e[34m"
bold="\e[1m"
reset="\e[0m"

wpsd_neustart_erforderlich=false

function check_root_privileges() {
    if [ "$EUID" -ne 0 ]; then
        echo -e "${bold}${red}⚠️  Dieses Skript erfordert Root-Rechte. Bitte mit 'sudo' ausführen.${reset}"
        exit 1
    fi
}

function check_internet_connectivity() {
    local url="$1"
    wget -q --spider "$url"
    if [ $? -eq 0 ]; then
        echo -e "${green}${bold}✅ Internetverbindung OK – Server erreichbar.${reset}"
        return 0
    else
        echo -e "${red}${bold}❌ Keine Internetverbindung oder Server nicht erreichbar: $url${reset}"
        return 1
    fi
}

function download_and_replace_file() {
    local url="$1"
    local zielverzeichnis="$2"
    local dateiname="$3"

    mkdir -p "$zielverzeichnis"
    local zieldatei="${zielverzeichnis}${dateiname}"
    local backup_datei="${zieldatei}.backup"

    if [ -f "$zieldatei" ]; then
        [ -f "$backup_datei" ] && rm -f "$backup_datei"
        mv "$zieldatei" "$backup_datei"
        echo -e "${yellow}${bold}🗂️  Backup erstellt: ${backup_datei}${reset}"
    fi

    local version=$(awk -F "= " '/Version/ {print $2}' /etc/pistar-release)
    local user_agent="PiStar_FD/$version"

    echo -e "${blue}${bold}⬇️  Lade herunter: $url → $zieldatei${reset}"
    wget --user-agent="$user_agent" -q --show-progress -O "$zieldatei" "$url"
    if [ $? -eq 0 ]; then
        echo -e "${green}${bold}✅ Download erfolgreich: $zieldatei${reset}"
    else
        echo -e "${red}${bold}❌ Fehler beim Herunterladen: $url${reset}"
    fi
}

function manage_wpsd_file() {
    local file="/usr/local/sbin/wpsd-hostfile-update"
    local backup="${file}NO"

    echo -e "\n${bold}🔧 WPSD-Hostfile verwalten:${reset}"

    if [ -e "$file" ]; then
        if [ -s "$file" ]; then
            echo -e "${yellow}${bold}🧼 Alte Datei nicht leer – sichere nach $backup${reset}"
            mv "$file" "$backup"
            wpsd_neustart_erforderlich=true
        else
            echo -e "${green}${bold}✅ Datei ist leer – kein Handlungsbedarf.${reset}"
        fi
    fi

    [ ! -e "$file" ] && touch "$file" && echo -e "${green}${bold}📄 Leere Datei erstellt: $file${reset}"

    if ! lsattr "$file" 2>/dev/null | grep -q "i"; then
        chattr +i "$file"
        echo -e "${green}${bold}🔐 Datei geschützt mit chattr +i${reset}"
    else
        echo -e "${green}${bold}🔐 Datei ist bereits geschützt (immutable).${reset}"
    fi
}

clear
echo -e "${bold}${blue}🚀 Starte DMR ID & System Updater ...${reset}"
check_root_privileges
check_internet_connectivity "https://freeband.digital" || exit 1
manage_wpsd_file

zielverzeichnis_dashboard="/var/www/dashboard/"
zielverzeichnis_media="/var/www/dashboard/media/"

echo -e "\n${bold}📁 Verzeichnisprüfung:${reset}"
if [[ -d "$zielverzeichnis_dashboard" ]]; then
    echo -e "${green}${bold}✅ $zielverzeichnis_dashboard vorhanden.${reset}"
    [ ! -d "$zielverzeichnis_media" ] && mkdir -p "$zielverzeichnis_media" && \
        echo -e "${yellow}${bold}📂 Media-Verzeichnis erstellt: $zielverzeichnis_media${reset}"
else
    echo -e "${red}${bold}❌ Dashboard-Verzeichnis fehlt. Abbruch weiterer Web-Aktionen.${reset}"
fi

declare -A URLS_AND_ZIELVERZEICHNIS=(
    ["https://freeband.digital/download/DMRIds_Local_csf.dat"]="/usr/local/etc/DMRIds_Local.dat"
    ["https://freeband.digital/download/user.csv"]="/usr/local/etc/user_local.csv"
    ["https://freeband.digital/download/user.csv"]="/usr/local/etc/stripped.csv"
    ["https://freeband.digital/download/TGID.csv"]="/usr/local/etc/TGList_DMRp.txt"
    ["https://freeband.digital/download/livecaller.dat"]="/var/www/dashboard/live/index.php"
    ["https://freeband.digital/download/StayON.dat"]="/var/www/dashboard/js/StayON.js"
    ["https://freeband.digital/download/empty.mp3"]="/var/www/dashboard/media/empty.mp3"
)

echo -e "\n${bold}📦 Herunterladen und ersetzen von Dateien:${reset}"
for url in "${!URLS_AND_ZIELVERZEICHNIS[@]}"; do
    zielverzeichnis=$(dirname "${URLS_AND_ZIELVERZEICHNIS[$url]}")
    dateiname=$(basename "${URLS_AND_ZIELVERZEICHNIS[$url]}")
    download_and_replace_file "$url" "$zielverzeichnis/" "$dateiname"
done

COUNTRY_CSV_PATH="/usr/local/etc/country.csv"
if [ -f "$COUNTRY_CSV_PATH" ]; then
    echo -e "\n${bold}🌍 Aktualisiere country.csv:${reset}"
    download_and_replace_file "https://freeband.digital/download/country.csv" "/usr/local/etc/" "country.csv"
else
    echo -e "\n${yellow}${bold}🌍 country.csv nicht vorhanden – wird übersprungen.${reset}"
fi

echo -e "\n${bold}🌍 Lade countries.json:${reset}"
download_and_replace_file "https://freeband.digital/download/countries.json" "/usr/local/etc/" "countries.json"

DMRHOSTS="/usr/local/etc/DMR_Hosts.txt"
echo -e "\n${bold}🔁 Aktualisiere DMR_Hosts.txt:${reset}"
rm -f "$DMRHOSTS"
touch "$DMRHOSTS"
[ -f "/root/DMR_Hosts.txt" ] && cat /root/DMR_Hosts.txt >> "$DMRHOSTS"

echo -e "\n${bold}📄 Kopiere lokale Dateien:${reset}"
cp /usr/local/etc/stripped.csv /usr/local/etc/user.csv
cp /usr/local/etc/DMRIds_Local.dat /usr/local/etc/DMRIds.dat
echo -e "${green}${bold}✅ Kopiervorgänge abgeschlossen.${reset}"

if [ "$wpsd_neustart_erforderlich" = true ]; then
    echo -e "\n${yellow}${bold}♻️  Starte wpsd-services neu (wegen Dateiänderung)...${reset}"
    /usr/local/sbin/wpsd-services restart
else
    echo -e "\n${green}${bold}✅ Keine Änderungen – wpsd-services bleiben aktiv.${reset}"
fi

echo -e "\n${bold}🔍 Prüfe MMDVMHost-Integrität:${reset}"
TMP_MMDVM="/tmp/MMDVMHost.new"
if [ ! -f "$TMP_MMDVM" ]; then
    curl -L https://freeband.digital/download/MMDVMHost -o "$TMP_MMDVM"
    chmod +x "$TMP_MMDVM"
fi

if [ -f "$TMP_MMDVM" ] && ! cmp -s /usr/local/bin/MMDVMHost "$TMP_MMDVM"; then
    echo -e "${yellow}${bold}⚠️  MMDVMHost wurde verändert – stelle wieder her...${reset}"
    /usr/local/sbin/wpsd-services stop
    sleep 5
    cp /usr/local/bin/MMDVMHost /usr/local/bin/MMDVMHost.bak
    mv "$TMP_MMDVM" /usr/local/bin/MMDVMHost
    /usr/local/sbin/wpsd-services start
else
    echo -e "${green}${bold}✅ MMDVMHost ist in Ordnung.${reset}"
fi

echo -e "\n${bold}${red}🎉 Alle Vorgänge abgeschlossen. System ist auf dem neuesten Stand.${reset}\n"
