#!/bin/bash
set -euo pipefail

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m'

get_ip() {
    curl -s --max-time 5 https://api.ipify.org 2>/dev/null || echo "onbekend"
}

cmd_status() {
    local ip
    ip=$(get_ip)
    if [[ "$ip" != "94.157.20.52" && "$ip" != "onbekend" ]]; then
        echo -e "${GREEN}Exit node actief${NC}"
    else
        echo -e "${YELLOW}Geen exit node actief${NC}"
    fi
    echo -e "   Publiek IP: ${BOLD}${ip}${NC}"
}

cmd_on() {
    local query="${1:-}"
    if [[ -z "$query" ]]; then
        echo -e "${YELLOW}Geef een exit node op, bv:${NC}"
        echo "  mullvad on nl-ams-wg-201"
        echo "  mullvad on amsterdam"
        exit 1
    fi

    local ip_before
    ip_before=$(get_ip)
    echo -e "Huidig IP: ${BOLD}${ip_before}${NC}"

    local node
    node=$(tailscale exit-node list 2>/dev/null | grep -i "$query" | head -1 | awk '{print $2}')
    if [[ -z "$node" ]]; then
        echo -e "${RED}Geen exit node gevonden voor '${query}'${NC}"
        exit 1
    fi

    echo -e "Verbinden met ${BOLD}${node}${NC}..."
    tailscale set --exit-node="$node" 2>&1 | grep -v "Warning:" || true
    sleep 2

    local ip_after
    ip_after=$(get_ip)
    echo -e "Nieuw IP: ${BOLD}${ip_after}${NC}"

    if [[ "$ip_after" != "$ip_before" && "$ip_after" != "onbekend" ]]; then
        echo -e "${GREEN}Exit node actief -- IP gewijzigd${NC}"
    else
        echo -e "${YELLOW}Exit node ingesteld maar IP lijkt niet gewijzigd${NC}"
    fi
}

cmd_off() {
    local ip_before
    ip_before=$(get_ip)
    echo -e "Huidig IP: ${BOLD}${ip_before}${NC}"
    echo -e "Exit node uitzetten..."

    tailscale set --exit-node= 2>&1 | grep -v "Warning:" || true
    sleep 2

    local ip_after
    ip_after=$(get_ip)
    echo -e "Nieuw IP: ${BOLD}${ip_after}${NC}"

    if [[ "$ip_after" != "$ip_before" ]]; then
        echo -e "${GREEN}Exit node uit -- IP gewijzigd${NC}"
    else
        echo -e "${GREEN}Exit node uit${NC}"
    fi
}

usage() {
    echo -e "${BOLD}mullvad${NC} - Exit node manager"
    echo ""
    echo "  mullvad                      Toon status"
    echo "  mullvad on <query>           Exit node aan (zoekt op hostname/land/stad)"
    echo "  mullvad off                  Exit node uit"
    echo ""
    echo -e "${BOLD}Voorbeelden:${NC}"
    echo "  mullvad on amsterdam"
    echo "  mullvad on nl-ams"
    echo "  mullvad off"
}

case "${1:-}" in
    on)   cmd_on "${2:-}" ;;
    off)  cmd_off ;;
    status|"") cmd_status ;;
    -h|--help|help) usage ;;
    *)
        echo -e "${RED}Onbekend commando: $1${NC}"
        usage
        exit 1
        ;;
esac
