ETHLIST=$( ls /sys/class/net | grep ^e )
IFS=' ' # space is set as delimiter
read -ra ETHARRAY <<< "$ETHLIST"
ETH_4_MODE="auto"
ETH_4_STATIC=""
ETH_4_DNS=""
ETH_4_GATEWAY=""
ETH_6_MODE="auto"
ETH_6_STATIC=""
ETH_6_DNS=""
ETH_6_GATEWAY=""
WLAN_SSID=""
WLAN_HIDDEN=0
WLAN_4_MODE="auto"
WLAN_4_STATIC=""
WLAN_4_DNS=""
WLAN_4_GATEWAY=""
WLAN_6_MODE="auto"
WLAN_6_STATIC=""
WLAN_6_GATEWAY=""
WLAN_PASSWORD_METHOD=""
WLAN_PASSWORD=""
WLAN_SSID_HIDDEN="false"
AP_ACTIVE="false"

. ../etc/server.conf
ETH_CON="${ETHARRAY[0]}"
export LC_ALL=C

function echoEscaped {
    printf ' %q' "$@" | cut -b 2-
}

function updateDHCPCD {
  ETH_4_STATIC_OUT=""
  ETH_4_DNS_OUT=""
  ETH_4_GATEWAY_OUT=""
  ETH_6_STATIC_OUT=""
  if [ "$ETH_4_MODE" == "manual" ] ; then
    if [ "$ETH_4_STATIC" != "" ] ; then
      ETH_4_STATIC_OUT="static ip_address=$ETH_4_STATIC"
    fi
    if [ "$ETH_4_DNS" != "" ] ; then
      ETH_4_DNS_OUT="static domain_name_servers=$ETH_4_DNS"
    fi
    if [ "$ETH_4_GATEWAY" != "" ] ; then
      ETH_4_GATEWAY_OUT="static routers=$ETH_4_GATEWAY"
    fi
  fi
  if [ "$ETH_6_MODE" == "manual" ] ; then
    if [ "$ETH_6_STATIC" != "" ] ; then
      ETH_6_STATIC_OUT="static ip6_address=$ETH_6_STATIC"
    fi
    if [ "$ETH_6_DNS" != "" ] ; then
      if [ "$ETH_4_DNS_OUT" == "" ] ; then
        ETH_4_DNS_OUT="static domain_name_servers=$ETH_6_DNS"
      else
        ETH_4_DNS_OUT="$ETH_4_DNS_OUT $ETH_6_DNS"
      fi
    fi
    if [ "$ETH_6_GATEWAY" != "" ] ; then
      if [ "$ETH_4_DNS_OUT" == "" ] ; then
        ETH_4_GATEWAY_OUT="static routers=$ETH_6_STATIC"
      else
        ETH_4_GATEWAY_OUT="ETH_4_GATEWAY_OUT $ETH_6_STATIC"
      fi
    fi
  fi
  cp /usr/local/Repetier-Setup/templates/dhcpcd.conf /etc
	if [ "$AP_ACTIVE" == "true" ] ; then
    cat >> /etc/dhcpcd.conf <<EOF

interface $WLAN_HOTSPOT
    static ip_address=10.10.10.1/24
    nohook wpa_supplicant

EOF
  else
    cat >> /etc/dhcpcd.conf <<EOF

interface wlan0
    nohook wpa_supplicant
    $WLAN_4_STATIC
    $WLAN_4_DNS
    $WLAN_4_GATEWAY
    $WLAN_6_STATIC
EOF
  fi
  cat >> /etc/dhcpcd.conf <<EOF

interface $ETH_CON
    $ETH_4_STATIC_OUT
    $ETH_4_DNS_OUT
    $ETH_4_GATEWAY_OUT
    $ETH_6_STATIC_OUT

EOF

  dhcpcd -n
}

# Parameter SSID password hidden
function writeWPASupplicant {
  IFS=
  if  [ "$WLAN_PASSWORD" == "" ] ; then
    pwLine=$'ssid="'$WLAN_SSID$'"\nkey_mgmt=NONE'
  else
    pwLine=$(wpa_passphrase "$WLAN_SSID" <<< $WLAN_PASSWORD | grep -E "psk|ssid")
  fi
  SCAN_SSID=""
  if [ "$WLAN_SSID_HIDDEN" == "true" ] ; then
    SCAN_SSID="scan_ssid=1"
  fi
  if [ "$WLAN_SSID" == "" ] ; then
  cat > /etc/wpa_supplicant/wpa_supplicant-${WLAN}.conf <<EOF
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=$COUNTRY
EOF
  else
  cat > /etc/wpa_supplicant/wpa_supplicant-${WLAN}.conf <<EOF
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=$COUNTRY

network={
    # ssid="$WLAN_SSID"
    $pwLine
    $SCAN_SSID
    $WLAN_EXTRA
}
EOF
  fi
  unset IFS
  wpa_cli -i $WLAN reconfigure > /dev/null
}

function writeServerConf {
    cp ../etc/server.conf ../etc/server.conf.bak
    cat > ../etc/server.conf <<EOF
SSID=`echoEscaped "$SSID"`
PASSWORD=`echoEscaped "$PASSWORD"`
CHANNEL=$CHANNEL
WLAN=$WLAN
WLAN_HOTSPOT=$WLAN_HOTSPOT
# Allow adding extra parameter to wpa_supplicant e.g. limit to 5ghz frequencies
# freq_list=5180 5200 5220 5240 5260 5280 5300 5320
WLAN_EXTRA=$WLAN_EXTRA
COUNTRY=$COUNTRY
AP_ACTIVE="$AP_ACTIVE"
ETH_CON="$ETH_CON"
ETH_4_MODE="$ETH_4_MODE"
ETH_4_STATIC="$ETH_4_STATIC"
ETH_4_DNS="$ETH_4_DNS"
ETH_4_GATEWAY="$ETH_4_GATEWAY"
ETH_6_MODE="$ETH_6_MODE"
ETH_6_STATIC="$ETH_6_STATIC"
ETH_6_DNS="$ETH_6_DNS"
ETH_6_GATEWAY="$ETH_6_GATEWAY"
WLAN_PASSWORD=`echoEscaped "$WLAN_PASSWORD"`
WLAN_PASSWORD_METHOD="$WLAN_PASSWORD_METHOD"
WLAN_SSID=`echoEscaped "$WLAN_SSID"`
WLAN_SSID_HIDDEN=`echoEscaped "$WLAN_SSID_HIDDEN"`
WLAN_4_MODE="$WLAN_4_MODE"
WLAN_4_STATIC="$WLAN_4_STATIC"
WLAN_4_DNS="$WLAN_4_DNS"
WLAN_4_GATEWAY="$WLAN_4_GATEWAY"
WLAN_6_MODE="$WLAN_6_MODE"
WLAN_6_STATIC="$WLAN_6_STATIC"
WLAN_6_GATEWAY="$WLAN_6_GATEWAY"
EOF
}

