#!/bin/bash
TMPFILE=/tmp/wlansetup

### Braucht sudo iwlist, reboot, rw, ro, wlanremove, wlanadd

mainMenu() {
  dialog --menu "Hauptmenü" 0 0 0 \
    1 'WLAN einrichten' \
    2 'WLAN-Konfiguration löschen' \
    3 'Beenden' \
    2>$TMPFILE
  if [ $? -gt 0 ]; then
    exit
  fi
  read Menu <$TMPFILE
  case $Menu in
    1)
      wlanList
      return
      ;;
    2)
      deleteConfig
      return
      ;;
    3)
      clear
      exit 0
      ;;
    *)
      return
  esac
}

wlanList() {
  IFS=$'\n'
  while true; do
    dialog --infobox "Suche WLANs..." 0 0
    ssid=('')
    menu=( )
    for s in $(doScan); do
      menu+=(${#ssid[@]} ${s})
      ssid+=(${s})
    done

    dialog --menu "SSID Ihres WLAN:" 0 0 0 \
      0 'Erneut scannen...' ${menu[@]} \
      2>$TMPFILE
    if [ $? -gt 0 ]; then
      return
    fi
    read Menu <$TMPFILE
    case $Menu in
      0)
        continue
        ;;
      *)
        if [ -n "${ssid[$Menu]}" ]; then
          getPSK ${ssid[$Menu]}
          return
        fi
        ;;
    esac
  done
}

doScan() {
  IFS=$'\n'
  for s in $(sudo iwlist wlan0 scan | grep -o 'ESSID:"[^"]\+"' | sort -u); do
    s=${s#ESSID:\"}
    s=${s%\"}
    echo "${s}"
  done
}

getPSK() {
  dialog --inputbox "Passwort für WLAN \"${1}\":" 0 0 2>$TMPFILE
  read PSK <$TMPFILE
  rm $TMPFILE
  sudo /usr/local/bin/rw
  sudo /usr/local/bin/wlanadd "${1}" "${PSK}"
  sudo /usr/local/bin/ro
  doReboot
}

deleteConfig() {
  dialog --yesno "Wollen Sie die bestehende WLAN-Konfiguration wirklich löschen?" 0 0 || return
  sudo /usr/local/bin/rw
  sudo /usr/local/bin/wlanremove
  sudo /usr/local/bin/ro
  doReboot
}

doReboot() {
  dialog --msgbox "Der VPiN wird neu gestartet." 0 0
  sudo /usr/sbin/reboot
  exit
}

while true; do
  mainMenu
done
