#!/bin/bash

# Must be root to use this tool
if [[ ! $EUID -eq 0 ]];then
  if [[ $(dpkg-query -s sudo) ]];then
        export SUDO="sudo"
  else
    echo "::: Please install sudo or run this as root."
    exit 1
  fi
fi

function makeOVPNFunc {
    shift
    $SUDO /opt/pivpn/makeOVPN.sh "$@"
    exit 1
}

function listClientsFunc {
    $SUDO /opt/pivpn/clientStat.sh
    exit 1
}

function listOVPNFunc {
    $SUDO /opt/pivpn/listOVPN.sh
    exit 1
}

function debugFunc {
    noUFW=$(cat /etc/pivpn/NO_UFW)
    echo "::: Generating Debug Output"
    $SUDO /opt/pivpn/pivpnDebug.sh | tee /tmp/debug.txt
    echo "::: "
    echo "::: Debug output completed above."
    echo "::: Copy saved to /tmp/debug.txt"
    echo "::: "
    if [[ ${noUFW} -eq 1 ]]; then
        IPTABLES_FIX=`$SUDO iptables -t nat -L -n -v | grep -c 'MASQUERADE.*10.8.0.0\/24'`
        $SUDO iptables -t nat -L -n -v | grep -q 'MASQUERADE.*10.8.0.0\/24'
        if [ $? -ne 0 ]; then
            IPTABLES_FIX=2
        fi
        if [[ ${IPTABLES_FIX} -gt 1 ]]; then
            echo "::: We detected some potential issues with your iptables."
            read -p "::: Would you like us to try to fix this? [y/n]: " -n 1 -r
            echo
            if [[ ${REPLY} =~ ^[Yy]$ ]]; then
                $SUDO /opt/pivpn/fix_iptables.sh
            fi
            echo "::: Attempt at fix completed."
            echo "::: Run 'pivpn debug' again to see if we detect issues."
        fi
    fi
    exit 1
}

function removeOVPNFunc {
    shift
    $SUDO /opt/pivpn/removeOVPN.sh "$@"
    exit 1
}

function uninstallFunc {
    $SUDO /opt/pivpn/uninstall.sh
    exit 1
}

function versionFunc {
    printf "\e[1mVersion 1.9\e[0m\n"
}

function helpFunc {
    echo "::: Control all PiVPN specific functions!"
    echo ":::"
    echo "::: Usage: pivpn <command> [option]"
    echo ":::"
    echo "::: Commands:"
    echo ":::  -a, add [nopass]     Create a client ovpn profile, optional nopass"
    echo ":::  -c, clients          List any connected clients to the server"
    echo ":::  -d, debug            Start a debugging session if having trouble"
    echo ":::  -l, list             List all valid and revoked certificates"
    echo ":::  -r, revoke           Revoke a client ovpn profile"
    echo ":::  -h, help             Show this help dialog"
    echo ":::  -u, uninstall        Uninstall PiVPN from your system!"
    exit 1
}

if [[ $# = 0 ]]; then
    helpFunc
fi

# Handle redirecting to specific functions based on arguments
case "$1" in
"-a" | "add"                ) makeOVPNFunc "$@";;
"-c" | "clients"            ) listClientsFunc;;
"-d" | "debug"              ) debugFunc;;
"-l" | "list"               ) listOVPNFunc;;
"-r" | "revoke"             ) removeOVPNFunc "$@";;
"-h" | "help"               ) helpFunc;;
"-u" | "uninstall"          ) uninstallFunc;;
"-v"                        ) versionFunc;;
*                           ) helpFunc;;
esac
