#!/bin/bash
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

if ! command -v mysql &> /dev/null || ! command -v vnstat &> /dev/null; then
    apt update && apt install -y default-mysql-client vnstat bc
fi

service=$1
ip=$(curl -s https://api.ipify.org)
os="Linux"
distro=$(cat /etc/os-release | grep "PRETTY_NAME" | cut -d= -f2 | tr -d '"')
cpu=$(grep "model name" /proc/cpuinfo | head -1 | cut -d ":" -f2 | xargs)
memory=$(free -m | awk 'NR==2{printf "%s/%sMB", $3,$2}')
disk=$(df -h / | awk 'NR==2{print $3 "/" $2}')
uptime=$(uptime -p | sed 's/up //')
bandwidth=$(vnstat --oneline | awk -F';' '{print $11}')
[ -z "$bandwidth" ] && bandwidth="0 KB"

# 4. LOAD & CLEAN CONFIGS
if [ -f /etc/openvpn/login/config.sh ]; then
    . /etc/openvpn/login/config.sh
elif [ -f /etc/.db-base ]; then
    . /etc/.db-base
fi
[ -f /root/.ports ] && . /root/.ports

# STRIP HIDDEN WINDOWS CHARS
USER=$(echo "${USER:-$DB_USER}" | tr -d '\r')
PASS=$(echo "${PASS:-$DB_PASS}" | tr -d '\r')
HOST=$(echo "${HOST:-$DB_HOST}" | tr -d '\r')
DB=$(echo "${DB:-$DB_NAME}" | tr -d '\r')

# 5. PROTOCOL LOGIC (SSH)
if [[ $service == "ssh" ]]; then
    sshd=$(systemctl is-active ssh)
    dropbear=$(systemctl is-active dropbear)
    squid=$(systemctl is-active squid)
    ssl=$(systemctl is-active stunnel4)
    socket=$((echo >/dev/tcp/localhost/80) &>/dev/null && echo "active" || echo "inactive")
    total_sshd=$(netstat -natp | grep -E ":22.*ESTABLISHED.*sshd" | wc -l)
    total_dropbear=$(netstat -natp | grep -E ":441.*ESTABLISHED.*dropbear" | wc -l)
    total_sshssl=$(netstat -natp | grep -E ":443.*ESTABLISHED.*stunnel4" | wc -l)
    totalssh=$((total_sshd + total_dropbear + total_sshssl))
    mysql --skip-ssl -u "$USER" -p"$PASS" -D "$DB" -h "$HOST" -e "UPDATE server_list SET cpu_model='$cpu', distro='$distro', memory='$memory', uptime='$uptime', disk='$disk', bandwidth='$bandwidth', os='$os', proto='$service', ssh_online='$totalssh', ssh_status='$sshd', dropbear_status='$dropbear', ssl_status='$ssl', squid_status='$squid', socket_status='$socket', ssh_port='$ssh_port', dropbear_port='$dropbear_port', squid='$squid_port', socket='$socket_port' WHERE server_ip='$ip'"

# 6. PROTOCOL LOGIC (OPENVPN)
elif [[ $service == "openvpn" ]]; then
    tcpovpn=$(systemctl is-active openvpn@server2.service)
    udpovpn=$(systemctl is-active openvpn@server.service)
    udphysteria=$(systemctl is-active hysteria-server.service)
    squid=$(systemctl is-active squid)
    ssl=$(systemctl is-active stunnel4)
    socket=$((echo >/dev/tcp/localhost/80) &>/dev/null && echo "active" || echo "inactive")
    tcpusers=$([ -f /etc/openvpn/server/tcpclient.log ] && sed -n '/^ROUTING_TABLE/p' /etc/openvpn/server/tcpclient.log | wc -l || echo 0)
    udpusers=$([ -f /etc/openvpn/server/udpclient.log ] && sed -n '/^ROUTING_TABLE/p' /etc/openvpn/server/udpclient.log | wc -l || echo 0)
    totalovpn=$((tcpusers + udpusers))
    total_hysteria=$(netstat -natp | grep -E ":5666.*ESTABLISHED.*hysteria" | wc -l)
    mysql --skip-ssl -u "$USER" -p"$PASS" -D "$DB" -h "$HOST" -e "UPDATE server_list SET cpu_model='$cpu', distro='$distro', memory='$memory', uptime='$uptime', disk='$disk', bandwidth='$bandwidth', os='$os', proto='$service', tcpssl='$tcp_ssl_port', udpssl='$udp_ssl_port', tcp_status='$tcpovpn', hysteria_status='$udphysteria', udp_status='$udpovpn', ssl_status='$ssl', squid_status='$squid', socket_status='$socket', tcp='$tcp_port', udp='$udp_port', hysteria_port='$hysteria_port', squid='$squid_port', socket='$socket_port', online='$totalovpn', hysteria_online='$total_hysteria' WHERE server_ip='$ip'"

# 7. PROTOCOL LOGIC (HYSTERIA)
elif [[ $service == "hysteria" ]]; then
    udphysteria=$(systemctl is-active hysteria-server.service)
    total_hysteria=$(netstat -natp | grep -E ":5666.*ESTABLISHED.*hysteria" | wc -l)
    mysql --skip-ssl -u "$USER" -p"$PASS" -D "$DB" -h "$HOST" -e "UPDATE server_list SET cpu_model='$cpu', distro='$distro', memory='$memory', uptime='$uptime', disk='$disk', bandwidth='$bandwidth', os='$os', proto='$service', hysteria_status='$udphysteria', hysteria_port='$hysteria_port', hysteria_online='$total_hysteria' WHERE server_ip='$ip'"

elif [[ $service == "reboot" ]]; then
    reboot
fi

