#!/bin/bash

wireless_mode=$(uci get wireless.general.mode)
ap_enable=$(uci -q get wireless.ap_0.disabled)
dev_model=$(cat /var/iot/model.txt)
enable_ap()
{
  local interface
  interface=$1

#init
  cp /etc/dhcp/dhcpd.conf.bak /etc/dhcp/dhcpd.conf
  sed -i '12s/interface wlan0\;/interface '$interface'\;/'  /etc/dhcp/dhcpd.conf
  echo "INTERFACESv4=\"$interface\"" > /etc/default/isc-dhcp-server
  echo "DHCPDv4_PID=/var/run/dhcpd.pid" >> /etc/default/isc-dhcp-server

  ifconfig $interface 10.130.1.1 netmask 255.255.255.0
  systemctl restart hostapd
  systemctl restart isc-dhcp-server
#NAT rules
  iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  iptables -A FORWARD -i eth0 -o $interface -m state --state RELATED,ESTABLISHED -j ACCEPT
  iptables -A FORWARD -i $interface -o eth0 -j ACCEPT

  iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
  iptables -A FORWARD -i wwan0 -o $interface -m state --state RELATED,ESTABLISHED -j ACCEPT
  iptables -A FORWARD -i $interface -o wwan0 -j ACCEPT

  if [[ $interface = wlan1  ]]; then 
    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
    iptables -A FORWARD -i wlan0 -o $interface -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A FORWARD -i $interface -o wlan0 -j ACCEPT
  fi
}

disable_ap()
{
  local interface
  interface=$1
  systemctl stop hostapd
  systemctl stop isc-dhcp-server

#clear NAT RULES
  iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
  iptables -D FORWARD -i eth0 -o $interface -m state --state RELATED,ESTABLISHED -j ACCEPT
  iptables -D FORWARD -i $interface -o eth0 -j ACCEPT

  iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE
  iptables -D FORWARD -i wwan0 -o $interface -m state --state RELATED,ESTABLISHED -j ACCEPT
  iptables -D FORWARD -i $interface -o wwan0 -j ACCEPT

  if [[ $interface = wlan1  ]]; then 
    iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE
    iptables -D FORWARD -i wlan0 -o $interface -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -D FORWARD -i $interface -o wlan0 -j ACCEPT
  fi
  systemctl restart NetworkManager && sleep 6

}

rtl_check=$(lsmod | grep -c rtl)

if [[ $rtl_check -eq 0 ]]; then
    ap_interface="wlan0"
else
    ap_interface="wlan1"
fi


case $ap_enable in
  0 | "checked")
    enable_ap "$ap_interface"
    ;;
  1)
    disable_ap "$ap_interface"
    ;;
  *)
    echo "Invalid AP type: $ap_enable"
    exit 1
    ;;
esac