#!/bin/bash
# liber-boot-usb — switch SD extlinux default to label 'usb' (boot from USB SSD)
# Optional: --reboot to reboot immediately
set -euo pipefail

REBOOT=0
[ "${1:-}" = "--reboot" ] && REBOOT=1

CONF_LIVE="/boot/extlinux/extlinux.conf"
CONF_SD_DEV="/dev/mmcblk1p3"
SD_MOUNTPOINT="/mnt/sd-extlinux-tmp"

CONF=""
MOUNTED_BY_US=0

# Detect 'usb' label name — accept usb, usb-kiosk, usb-ssd
USB_LABEL=""
detect_label() {
    awk '/^label[[:space:]]/ {print $2}' "$1" | grep -E '^(usb|usb-kiosk|usb-ssd)$' | head -1
}

if [ -w "$CONF_LIVE" ]; then
    USB_LABEL=$(detect_label "$CONF_LIVE")
    [ -n "$USB_LABEL" ] && CONF="$CONF_LIVE"
fi
if [ -z "$CONF" ] && [ -b "$CONF_SD_DEV" ]; then
    mkdir -p "$SD_MOUNTPOINT"
    mount "$CONF_SD_DEV" "$SD_MOUNTPOINT"
    MOUNTED_BY_US=1
    CONF="$SD_MOUNTPOINT/boot/extlinux/extlinux.conf"
    USB_LABEL=$(detect_label "$CONF")
fi

cleanup() {
    if [ "$MOUNTED_BY_US" = "1" ]; then
        sync
        umount "$SD_MOUNTPOINT" 2>/dev/null || true
        rmdir "$SD_MOUNTPOINT" 2>/dev/null || true
    fi
}
trap cleanup EXIT

if [ -z "$USB_LABEL" ]; then
    echo "ERROR: no usb/usb-kiosk/usb-ssd label in extlinux.conf ($CONF)" >&2
    exit 2
fi

TMP=$(mktemp "${CONF}.XXXXXX")
awk -v new="default $USB_LABEL" 'BEGIN{seen=0} /^default[[:space:]]/ { if(!seen){print new; seen=1; next} } {print}' "$CONF" > "$TMP"
if ! grep -qE '^default[[:space:]]' "$TMP"; then
    { echo "default $USB_LABEL"; cat "$TMP"; } > "${TMP}.2"
    mv "${TMP}.2" "$TMP"
fi
chmod --reference="$CONF" "$TMP"
mv "$TMP" "$CONF"
sync

echo "✓ Default boot set to '$USB_LABEL' in $CONF"
grep -E '^default[[:space:]]' "$CONF"

if [ "$REBOOT" = "1" ]; then
    echo "Rebooting in 5 seconds..."
    sleep 5
    systemctl reboot || reboot
fi
