#!/bin/bash

# 檢查是否為 root user，如果不是則使用 sudo 切換
if [[ $EUID -ne 0 ]]; then
    exec sudo "$0" "$@"
    exit
fi

# WireGuard 設定檔案資料夾
wg_conf_folder="/etc/wireguard/"

# 列出所有可使用的設定檔案
function list_conf_files() {
    echo "可用的 WireGuard 設定檔案："
    ls -1 $wg_conf_folder | grep ".conf$"
}

# 連線到指定的 VPN
function connect() {
    local intf=$1
    # 切斷其他已連線的 VPN
    if [[ $1 == "--disconnect-others" ]] || [[ $1 == "-d" ]] ; then
        wg-quick down "$(wg show | grep "interface:" | awk '{print $2}')"
        intf=$2
    fi

    # 確認設定檔案是否存在
    if [[ ! -f "$wg_conf_folder/$intf.conf" ]]; then
        echo "找不到 $wg_conf_folder/$intf.conf"
        exit
    fi

    # 連線 VPN
    wg-quick up "$wg_conf_folder/$intf.conf"
    echo "已連線到 $intf"
}

# 斷開指定的 VPN，若未指定則斷開所有 VPN
function disconnect() {
    if [[ -n "$1" ]]; then
        wg-quick down "$1"
        echo "已斷開 $1"
    else
        wg-quick down "$(wg show | grep "interface:" | awk '{print $2}')"
        echo "已斷開所有 VPN"
    fi
}

# 列出已連線的 VPN
function list_connections() {
    echo "已連線的 VPN："
    wg show | grep "interface:" | awk '{print $2}'
}

# 判斷參數是否為空
if [[ -z $1 ]]; then
    echo "使用方式："
    echo "    $0 list - 列出所有可使用的設定檔案"
    echo "    $0 connect [-d|--disconnect-others] <config> - 連線到指定的 VPN"
    echo "    $0 disconnect [interface] - 斷開指定的 VPN，若未指定則斷開所有 VPN"
    echo "    $0 list-connections - 列出已連線的 VPN"
    exit
fi

case "$1" in
    list)
        list_conf_files
        ;;
    connect)
        if [[ -n $2 ]]; then
            connect "$2" "$3"
        else
            echo "請輸入要連線的 VPN 設定檔案名稱"
        fi
        ;;
    disconnect)
        disconnect "$2"
        ;;
    list-connections)
        list_connections
        ;;
    *)
        echo "無效的參數：$1"
        exit
        ;;
esac

# vim: set ft=sh :
