#!/bin/bash

export TERM=xterm

BASE_URL="216.104.40.250/tools/bios"
MOTHERBOARD=$(dmidecode -t 2 | grep 'Product Name' | awk '{print $3}')
SESSION="bios_update"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG="$SCRIPT_DIR/bios.log"

rm -rf /root/bios_updater.sh
rm -rf /tmp/bios_updater.sh
> "$LOG"

# Clean up any existing SUM directory before re-downloading
rm -rf /root/sum_2.9.0_Linux_x86_64* 2>/dev/null

run_bios() {
    local board="$1" path="$2" script="$3" warn="${4:-}"

    echo "$board DETECTED -- PROCEEDING WITH BIOS UPDATE!"
    [ -n "$warn" ] && echo "$warn"

    wget -q "${BASE_URL}/${path}/${script}" && chmod +x "$script"

    # Kill any old session
    tmux kill-session -t "$SESSION" 2>/dev/null

    # Run script in detached tmux session, log all output
    tmux new-session -d -s "$SESSION" "bash $script > $LOG 2>&1"

    local timeout=600
    local elapsed=0
    local last_line=0

    while [ $elapsed -lt $timeout ]; do
        sleep 2
        elapsed=$((elapsed + 2))

        local total=$(wc -l < "$LOG" 2>/dev/null || echo 0)
        if [ "$total" -gt "$last_line" ]; then
            sed -n "$((last_line + 1)),${total}p" "$LOG"
            last_line=$total
        fi

        if ! tmux has-session -t "$SESSION" 2>/dev/null; then
            local final=$(wc -l < "$LOG" 2>/dev/null || echo 0)
            if [ "$final" -gt "$last_line" ]; then
                sed -n "$((last_line + 1)),${final}p" "$LOG"
            fi
            exit 0
        fi
    done

    echo "TIMEOUT: BIOS update exceeded ${timeout}s"
    tmux kill-session -t "$SESSION" 2>/dev/null
    exit 1
}

OOB_WARN="IF UPDATE FAILS DUE TO OOB ACTIVATION YOU WILL NEED TO DO THE UPDATE MANUALLY VIA USB OR IPMI WEBUI!"

case "$MOTHERBOARD" in
    X10DDW-i)   run_bios "$MOTHERBOARD" "x10ddw-i"   "x10ddw-i_bios.sh"   ;;
    X10DRI-T)   run_bios "$MOTHERBOARD" "x10dri"     "x10dri_bios.sh"     ;;
    X10DRi)     run_bios "$MOTHERBOARD" "x10dri"     "x10dri_bios.sh"     ;;
    X10DRH-CT)  run_bios "$MOTHERBOARD" "x10drh-ct"  "x10drh-ct_bios.sh"  ;;
    X10SRi-F)   run_bios "$MOTHERBOARD" "x10sri-f"   "x10sri-f_bios.sh"   ;;
    X11SSL-CF)  run_bios "$MOTHERBOARD" "x11ssl-cf"  "x11ssl-cf_bios.sh"  ;;
    X11DDW-NT)  run_bios "$MOTHERBOARD" "x11ddw-nt"  "x11ddw-nt_bios.sh"  ;;
    X11SCH-F)   run_bios "$MOTHERBOARD" "x11sch-f"   "x11sch-f_bios.sh"   ;;
    X11DPU)     run_bios "$MOTHERBOARD" "x11dpu"     "x11dpu_bios.sh"     ;;
    H12SSW-AN6) run_bios "$MOTHERBOARD" "h12ssw-an6" "h12ssw-an6_bios.sh" "$OOB_WARN" ;;
    X12STH-SYS) run_bios "$MOTHERBOARD" "x12sth-sys" "x12sth-sys_bios.sh" "$OOB_WARN" ;;
    X12DDW-A6)  run_bios "$MOTHERBOARD" "x12ddw-a6"  "x12ddw-a6_bios.sh"  "$OOB_WARN" ;;
    X12STW-TF)  run_bios "$MOTHERBOARD" "x12stw-tf"  "x12stw-tf_bios.sh"  "$OOB_WARN" ;;
    *)
        echo "$MOTHERBOARD NOT SUPPORTED BY SCRIPT -- NO UPDATES APPLIED!"
        exit 0
        ;;
esac
rm -- "$0"
