#!/bin/bash
set -euo pipefail
IFACE="${1:?interface}"
SSID="${2:?ssid}"
PASSWORD="${3:?password}"
IP="${4:-192.168.1.254}"

/usr/bin/nmcli device set "$IFACE" managed yes 2>/dev/null || true

# Disable autoconnect on all WiFi client profiles before disconnecting the interface.
# Without this, NM immediately tries to reconnect as a client while we're switching
# to AP mode, causing a race condition that leaves the interface in a broken state.
/usr/bin/nmcli -t -f NAME,TYPE connection show 2>/dev/null | grep ':802-11-wireless$' | cut -d: -f1 | \
    while IFS= read -r conn; do
        [ "$conn" = "Hotspot" ] && continue
        /usr/bin/nmcli connection modify "$conn" connection.autoconnect no 2>/dev/null || true
    done

/usr/bin/nmcli dev disconnect "$IFACE" 2>/dev/null || true
/usr/bin/nmcli connection delete Hotspot 2>/dev/null || true

/usr/bin/nmcli connection add \
    type wifi \
    ifname "$IFACE" \
    con-name Hotspot \
    ssid "$SSID" \
    mode ap \
    802-11-wireless.band bg \
    802-11-wireless.channel 6 \
    ipv4.method shared \
    ipv4.addresses "${IP}/24" \
    wifi-sec.key-mgmt wpa-psk \
    wifi-sec.psk "$PASSWORD" \
    connection.autoconnect no

/usr/bin/nmcli connection up Hotspot
