#!/bin/bash
source config.sh

action=$1
#-------------------------------------Functions---------------------------------
send_discord() {
    MESSAGE="$1"

    if [ -n "$discordwebhook" ]; then
        curl -H "Content-Type: application/json" \
             -d "{\"content\":\"$1\"}" \
             "$discordwebhook"
    fi
}

send_command() {
    screen -S $server_name -X stuff "$1$(echo -ne '\r')" || true
}




#----------------------------------------Variables------------------------------

currentDayOfMonth=$(date +%d)
currentMonth=$(date +%m)
currentYear=$(date +%Y)

#-----------------------------------------Actions--------------------------------
if [ "$action" == "stop" ]; then
    send_command stop
    echo "Server wird gestoppt"
fi

if [ "$action" == "start" ]; then
    cd "$server_path/$server_name" && ./start.sh
    echo "Server wird gestartet"
fi

if [ "$action" == "auto" ]; then
    if (( $server_reinstall_dayofmonth == $currentDayOfMonth && $server_reinstall_month == $currentMonth && $server_id != $currentYear)); then
        echo "[MinecraftServerManager] Server Reinstall heute!"
        echo "[MinecraftServerManager] Server Reinstall wird eingeleitet..." 
        send_discord "[MinecraftServerManager] Server Reinstall wird eingeleitet..."
        
        #-------Server Stop---------
        echo "[MinecraftServerManager] Server wird gestoppt:"
        send_discord "[MinecraftServerManager] Server wird gestoppt:"
        send_command stop

        while screen -list | grep -q "$server_name"; do
            echo "Server läuft noch..."
            sleep 5
        done

        echo "[MinecraftServerManager] Server wurde gestoppt"
        send_discord "[MinecraftServerManager] Server wurde gestoppt"
        #-----------------------------

        #-------------Server Archive--------------
        echo "[MinecraftServerManager] Server wird archiviert:"
        send_discord "[MinecraftServerManager] Server wird archiviert:"

        tar -czf "$server_archive_path/$server_name-$server_id.tar.gz" -C "$server_path" "$server_name"

        echo "[MinecraftServerManager] Server wurde archiviert"
        send_discord "[MinecraftServerManager] Server wurde archiviert"
        #-----------------------------------------

        #-------------Server Backup / Delete---------------
        echo "[MinecraftServerManager] Server Backup wird erstellt:"
        send_discord "[MinecraftServerManager] Server Backup wird erstellt:"

        cd "$server_path"
        if [ -n "$previous_server_id" ]; then
            rm -rf "$server_path/$server_name-backup-$previous_server_id"
        fi
        mv "$server_path/$server_name" "$server_path/$server_name-backup-$server_id"

        echo "[MinecraftServerManager] Server Backup wurde erstellt"
        send_discord "[MinecraftServerManager] Server Backup wurde erstellt"
        #--------------------------------------------------

        #---------------Server Install-----------------------

        echo "[MinecraftServerManager]: Aktualisiere Server ID:"
        send_discord "[MinecraftServerManager]: Aktualisiere Server ID"

        date +%Y > server_id

        echo "[MinecraftServerManager]: Server ID wurde aktualisiert: $(cat server_id)"
        send_discord "[MinecraftServerManager]: Server ID wurde aktualisiert: $(cat server_id)"

        echo "[MinecraftServerManager]: Server Installation"
        send_discord "[MinecraftServerManager]: Server Installation"

        mkdir "$server_name"
        cd "$server_name"

        echo "[MinecraftServerManager]: Get server.properties"
        send_discord "[MinecraftServerManager]: Get server.properties"
        cp ../server.properties server.properties
        echo "motd=§2$server_name - $(cat ../server_id)" >> server.properties

        echo "[MinecraftServerManager]: Get eula.txt"
        send_discord "[MinecraftServerManager]: Get eula.txt"
        cp ../eula.txt eula.txt

        echo "[MinecraftServerManager]: Get ram info"
        send_discord "[MinecraftServerManager]: Get ram info"
        cp ../ram ram

        echo "[MinecraftServerManager]: Get server name"
        send_discord "[MinecraftServerManager]: Get server name"
        cp ../server_name server_name

        echo "[MinecraftServerManager]: Downloading server.jar for version $version"
        send_discord "[MinecraftServerManager]: Downloading server.jar for version $version"
        wget -O server.jar "https://files.hummelsvrs.de/minecraft/mcsvr/$serversoftware/$version.jar"

        echo "[MinecraftServerManager]: Generating start.sh file"
        send_discord "[MinecraftServerManager]: Generating start.sh file"
        echo '#!/bin/bash
        ram_number=$(cat ram)
        ram=""$ram_number""G""
        server_name=$(cat server_name)

        screen -dmS "$server_name" bash -c "java -Xmx$ram -jar server.jar nogui"
        ' > start.sh

        chmod +x start.sh

        echo "[MinecraftServerManager]: Server wurde installiert"
        send_discord "[MinecraftServerManager]: Server wurde installiert"

        #----------------------------------------------------

        #---------------------------Plugins & Datapacks----------------------

        echo "[MinecraftServerManager]: Plugins werden übertragen:"
        send_discord "[MinecraftServerManager]: Plugins werden übertragen:"

        mkdir -p "$server_path/$server_name/plugins"
        cp -r "$server_plugins_path/"* "$server_path/$server_name/plugins"

        echo "[MinecraftServerManager]: Plugins wurden übertragen"
        send_discord "[MinecraftServerManager]: Plugins wurden übertragen"


        echo "[MinecraftServerManager]: Datapacks werden übertragen:"
        send_discord "[MinecraftServerManager]: Datapacks werden übertragen:"

        cd "$server_path/$server_name"
        mkdir -p "world/datapacks"
        
        cp -r "$server_datapacks_path"/* "$server_path/$server_name/world/datapacks"

        echo "[MinecraftServerManager]: Datapacks wurden übertragen"
        send_discord "[MinecraftServerManager]: Datapacks wurden übertragen"

        #----------------------Whitelist & OP-List-----------------

        echo "[MinecraftServerManager]: Whitelist wird übertragen:"
        send_discord "[MinecraftServerManager]: Whitelist wird übertragen:"

        cp "$server_path/$server_name-backup-$server_id/whitelist.json" "$server_path/$server_name/whitelist.json"

        echo "[MinecraftServerManager]: Whitelist wurde übertragen:"
        send_discord "[MinecraftServerManager]: Whitelist wurde übertragen:"

        echo "[MinecraftServerManager]: OP-List wird übertragen:"
        send_discord "[MinecraftServerManager]: OP-List wird übertragen:"

        cp "$server_path/$server_name-backup-$server_id/ops.json" "$server_path/$server_name/ops.json"

        echo "[MinecraftServerManager]: OP-List wurde übertragen:"
        send_discord "[MinecraftServerManager]: OP-List wurde übertragen:"

        #--------------------Start Server--------------------

        echo "[MinecraftServerManager]: Server wird gestartet:"
        send_discord "[MinecraftServerManager]: Server wird gestartet:"

        cd "$server_path/$server_name" && ./start.sh

        sleep 1

        if screen -list | grep -q "$server_name"; then
            sleep 60
            if screen -list | grep -q "$server_name"; then
                echo "[MinecraftServerManager]: Server wurde gestartet"
                send_discord "[MinecraftServerManager]: Server wurde gestartet"
            else
                echo "[MinecraftServerManager]: Server wurde nicht gestartet oder ist gecrasht"
                send_discord "[MinecraftServerManager]: Server wurde nicht gestartet oder ist gecrasht"
            fi
        fi

    else
        echo "[MinecraftServerManager] Heute ist nicht das Reinstall Datum oder der server für $server_id existiert bereits."
    fi
fi