#!/bin/sh

LOCK=/run/link-mode.lock
STATE=/run/link-mode.state

log() {
    logger -t link-mode "$*"
}

if ! mkdir "$LOCK" 2>/dev/null; then
    log "another transition is in progress; ignoring ${1:-}"
    exit 0
fi

cleanup() {
    rmdir "$LOCK" 2>/dev/null || true
}

trap cleanup EXIT HUP INT TERM

wfb_active() {
    pidof wfb_tx wfb_rx wfb_tun wifilink >/dev/null
}

case "${1:-}" in
    preflight)
        if wfb_active; then
            echo wfb >"$STATE"
            exit 0
        fi

        log "management -> WFB"
        ifdown wlan0 >/dev/null 2>&1 || true
        killall -q wpa_supplicant 2>/dev/null || true
        ip link set wlan0 up

        if /usr/bin/wifibroadcast start && wfb_active; then
            echo wfb >"$STATE"
            log "WFB is active"
            exit 0
        fi

        log "WFB start failed"
        exit 1
        ;;

    management)
        if wfb_active; then
            log "WFB -> management"
            /usr/bin/wifibroadcast stop
            killall -q wifilink 2>/dev/null || true
        fi

        /usr/bin/mgmt-net --force
        echo management >"$STATE"
        log "management path restored"
        /etc/init.d/S97link-monitor start
        exit 0
        ;;

    *)
        echo "Usage: $0 {preflight|management}" >&2
        exit 2
        ;;
esac
