#!/bin/sh

SSID="$1"
PASSWD="$2"

RADIO="radio0"
STA_SECTION="sta0"
STA_IFACE="trm_wwan"
AP_CHANNEL="11"

if [ -z "$SSID" ] || [ -z "$PASSWD" ]; then
  echo "Usage: $0 <ssid> <passwd>"
  echo "Example: $0 'REDMI K80 Pro' '12345678'"
  exit 1
fi

echo "[1/7] Stop travelmate..."
/etc/init.d/travelmate stop 2>/dev/null

echo "[2/7] Configure uplink network interface: $STA_IFACE"
uci -q delete network.$STA_IFACE
uci set network.$STA_IFACE='interface'
uci set network.$STA_IFACE.proto='dhcp'
uci set network.$STA_IFACE.metric='100'
uci commit network

echo "[3/7] Add $STA_IFACE to wan firewall zone..."
WAN_ZONE="$(uci show firewall | grep '=zone' | cut -d. -f2 | while read z; do
  name="$(uci -q get firewall.$z.name)"
  [ "$name" = "wan" ] && echo "$z" && break
done)"

if [ -n "$WAN_ZONE" ]; then
  uci -q del_list firewall.$WAN_ZONE.network="$STA_IFACE"
  uci add_list firewall.$WAN_ZONE.network="$STA_IFACE"
  uci commit firewall
  /etc/init.d/firewall reload 2>/dev/null
else
  echo "Warning: wan firewall zone not found, skip firewall config"
fi

echo "[4/7] Configure Wi-Fi STA for travelmate..."
uci -q delete wireless.$STA_SECTION
uci -q delete wireless.trm_radio0
uci -q delete wireless.trm_uplink1

uci set wireless.$RADIO.channel="$AP_CHANNEL"
uci set wireless.$RADIO.htmode='HT20'

uci set wireless.$STA_SECTION='wifi-iface'
uci set wireless.$STA_SECTION.device="$RADIO"
uci set wireless.$STA_SECTION.mode='sta'
uci set wireless.$STA_SECTION.network="$STA_IFACE"
uci set wireless.$STA_SECTION.ssid="$SSID"
uci set wireless.$STA_SECTION.encryption='psk2'
uci set wireless.$STA_SECTION.key="$PASSWD"

# Important:
# Let travelmate manage this STA.
# Do not let native netifd keep it always enabled.
uci set wireless.$STA_SECTION.disabled='1'

uci commit wireless

echo "[5/7] Configure travelmate uplink..."

# remove old travelmate uplinks
while uci -q delete travelmate.@uplink[0]; do
  :
done

uci set travelmate.global.trm_enabled='1'
uci set travelmate.global.trm_iface="$STA_IFACE"
uci set travelmate.global.trm_laniface='lan'
uci set travelmate.global.trm_radio="$RADIO"

# Disable captive/netcheck first.
# Phone hotspot usually does not need captive portal check.
uci set travelmate.global.trm_captive='0'
uci set travelmate.global.trm_netcheck='0'
uci set travelmate.global.trm_proactive='0'
uci set travelmate.global.trm_debug='0'

uci add travelmate uplink
uci set travelmate.@uplink[-1].enabled='1'
uci set travelmate.@uplink[-1].device="$RADIO"
uci set travelmate.@uplink[-1].ssid="$SSID"

uci commit travelmate

echo "[6/7] Reload Wi-Fi config..."
wifi reload

sleep 20
echo "[7/7] Enable and start travelmate..."
/etc/init.d/travelmate enable
/etc/init.d/travelmate start

echo "Done."
