#!/bin/bash
# ======================================================
#   HOKAGE LEGEND: VPS MONITORING & SPEEDTEST v3
#   (With Visual Graphics)
# ======================================================

# --- WARNA TEXT ---
NC='\033[0m'
BOLD='\033[1m'
WHITE='\033[1;37m'
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[36m'
PURPLE='\033[35m'
CYAN='\033[38;5;51m'
BORDER_COLOR='\033[38;5;93m'

# --- [SETTING WARNA BACKGROUND HEADER] ---
BG_RED='\033[48;5;88m'
BG_BLUE='\033[48;5;19m'
BG_GREEN='\033[48;5;22m'
BG_ORANGE='\033[48;5;130m'

# --- CEK & INSTALL DEPENDENCIES ---
clear
# Cek vnStat
if ! command -v vnstat &> /dev/null; then
    echo -e "${YELLOW}Menginstall vnStat...${NC}"
    apt-get update && apt-get install vnstat -y > /dev/null 2>&1
    systemctl enable vnstat
    systemctl start vnstat
fi

# Cek Speedtest-cli
if ! command -v speedtest-cli &> /dev/null; then
    echo -e "${YELLOW}Menginstall Speedtest-cli...${NC}"
    apt-get install python3-pip -y > /dev/null 2>&1
    pip3 install speedtest-cli > /dev/null 2>&1
    if ! command -v speedtest-cli &> /dev/null; then
        apt-get install speedtest-cli -y > /dev/null 2>&1
    fi
fi

# Ambil Interface Utama
IFACE=$(ip route get 8.8.8.8 | awk '{print $5; exit}')
if [[ ! -d /var/lib/vnstat ]]; then
    vnstat -u -i $IFACE > /dev/null 2>&1
fi

clear

# --- FUNGSI GRAFIK BAR ---
# Fungsi ini membuat bar visual: [|||||.....]
function print_bar() {
    local pct=$1     # Input persentase (angka saja)
    local width=20   # Lebar bar
    local fill=$(( pct * width / 100 ))
    local empty=$(( width - fill ))
    local color="${GREEN}"

    # Tentukan warna berdasarkan load
    if [[ $pct -ge 80 ]]; then color="${RED}";
    elif [[ $pct -ge 50 ]]; then color="${YELLOW}"; fi

    # Cetak Bar
    printf "["
    printf "${color}"
    for ((i=0; i<fill; i++)); do printf "|"; done
    printf "${NC}"
    for ((i=0; i<empty; i++)); do printf "."; done
    printf "] ${color}${pct}%%${NC}"
}

# --- FUNGSI HEADER KOTAK ---
function print_box_header() {
    local title=$1
    local bg=$2
    echo -e "${BORDER_COLOR}╭──────────────────────────────────────────────────────╮${NC}"
    printf "${BORDER_COLOR}│${bg}${BOLD}${WHITE}%-54s${NC}${BORDER_COLOR}│${NC}\n" "   $title"
    echo -e "${BORDER_COLOR}╰──────────────────────────────────────────────────────╯${NC}"
}

# ======================================================
# 1. SYSTEM RESOURCES & PERFORMANCE (HEADER MERAH)
# ======================================================
print_box_header "SYSTEM PERFORMANCE" "$BG_RED"

# Ambil Data CPU
# Menggunakan top batch mode, ambil line Cpu(s), ambil angka idle, kurangi dari 100
CPU_IDLE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print $1}')
CPU_USAGE_FLOAT=$(echo "100 - $CPU_IDLE" | bc -l 2>/dev/null || awk "{print 100 - $CPU_IDLE}")
CPU_USAGE_INT=$(printf "%.0f" "$CPU_USAGE_FLOAT")
CPU_LOAD=$(top -bn1 | grep load | awk '{printf "%.2f", $(NF-2)}')
CORE_COUNT=$(nproc)

# Ambil Data RAM
RAM_TOTAL=$(free -m | awk 'NR==2{print $2}')
RAM_USED=$(free -m | awk 'NR==2{print $3}')
RAM_FREE=$(free -m | awk 'NR==2{print $4}')
RAM_PERSEN=$(awk "BEGIN {printf \"%.0f\", ($RAM_USED / $RAM_TOTAL) * 100}")

# Info OS
UPTIME=$(uptime -p | cut -d " " -f 2-)
MODEL=$(cat /etc/os-release | grep -w PRETTY_NAME | head -n1 | sed 's/=//g' | sed 's/"//g' | sed 's/PRETTY_NAME//g')

# TAMPILAN
echo -e " ${BOLD}OS System${NC}    : $MODEL"
echo -e " ${BOLD}Uptime${NC}       : $UPTIME"
echo -e " ${BOLD}CPU Core${NC}     : $CORE_COUNT Core(s) (Load Avg: $CPU_LOAD)"
echo -e " ${BOLD}CPU Usage${NC}    : $(print_bar $CPU_USAGE_INT)"
echo -e " ${BOLD}RAM Usage${NC}    : $(print_bar $RAM_PERSEN)"
echo -e "               ${gray}(Used: ${RAM_USED}MB / Total: ${RAM_TOTAL}MB)${NC}"
echo ""

# ======================================================
# 2. TRAFFIC MONITOR (HEADER BIRU)
# ======================================================
print_box_header "TRAFFIC MONITORING ($IFACE)" "$BG_BLUE"

RX_DAY=$(vnstat -d -i $IFACE --oneline | awk -F';' '{print $4}')
TX_DAY=$(vnstat -d -i $IFACE --oneline | awk -F';' '{print $5}')
TOTAL_DAY=$(vnstat -d -i $IFACE --oneline | awk -F';' '{print $6}')

RX_MON=$(vnstat -m -i $IFACE --oneline | awk -F';' '{print $9}')
TX_MON=$(vnstat -m -i $IFACE --oneline | awk -F';' '{print $10}')
TOTAL_MON=$(vnstat -m -i $IFACE --oneline | awk -F';' '{print $11}')

TOTAL_ALL=$(vnstat -i $IFACE --oneline | awk -F';' '{print $11}')

if [[ -z "$RX_DAY" ]]; then
    echo -e "${YELLOW}   Database traffic sedang dikumpulkan...${NC}"
    vnstat -i $IFACE > /dev/null 2>&1
else
    echo -e "${BORDER_COLOR}┌──────────────────────────────────────────────────────┐${NC}"
    printf "${BORDER_COLOR}│${NC} ${BOLD}%-15s${NC} | ${GREEN}%-10s${NC} | ${RED}%-10s${NC} | ${CYAN}%-10s${NC} ${BORDER_COLOR}│${NC}\n" "PERIODE" "RX (Down)" "TX (Up)" "TOTAL"
    echo -e "${BORDER_COLOR}├──────────────────────────────────────────────────────┤${NC}"
    printf "${BORDER_COLOR}│${NC} %-15s | %-10s | %-10s | %-10s ${BORDER_COLOR}│${NC}\n" "Harian" "$RX_DAY" "$TX_DAY" "$TOTAL_DAY"
    printf "${BORDER_COLOR}│${NC} %-15s | %-10s | %-10s | %-10s ${BORDER_COLOR}│${NC}\n" "Bulanan" "$RX_MON" "$TX_MON" "$TOTAL_MON"
    echo -e "${BORDER_COLOR}└──────────────────────────────────────────────────────┘${NC}"
    echo -e " ${BOLD}Total Traffic (All Time):${NC} $TOTAL_ALL"
fi
echo ""

# ======================================================
# 3. SERVICE STATUS (HEADER HIJAU)
# ======================================================
print_box_header "TUNNELING SERVICE STATUS" "$BG_GREEN"

check_service() {
    if systemctl is-active --quiet $1; then echo -e "${GREEN}ON 🟢${NC}"; else echo -e "${RED}OFF 🔴${NC}"; fi
}

SSH=$(check_service ssh)
WS=$(check_service ws)
DROPBEAR=$(check_service dropbear)
HAPROXY=$(check_service haproxy)
XRAY=$(check_service xray)
NGINX=$(check_service nginx)
ZIVPN=$(check_service zivpn)
UDP=$(check_service udp-custom)

echo -e " ${BOLD}SSH / OVPN${NC}             ${BOLD}XRAY / WEB${NC}"
echo -e " SSH        : $SSH       XRAY Core  : $XRAY"
echo -e " Dropbear   : $DROPBEAR       Nginx      : $NGINX"
echo -e " Haproxy    : $HAPROXY"
echo -e ""
echo -e " ${BOLD}CUSTOM TUNNEL${NC}"
echo -e " ZiVPN      : $ZIVPN"
echo -e " UDP Custom : $UDP"
echo -e " WS Python  : $WS"
echo ""

# ======================================================
# 4. SPEEDTEST (HEADER ORANGE)
# ======================================================
print_box_header "SPEEDTEST SERVER (OOKLA)" "$BG_ORANGE"
echo -e "${YELLOW}   Sedang melakukan tes kecepatan internet...${NC}"

# Gunakan timeout agar tidak hang jika server speedtest down
speedtest-cli --simple --secure --timeout 20 > /tmp/speedtest.txt 2>/dev/null

DOWNLOAD=$(cat /tmp/speedtest.txt | grep "Download" | awk '{print $2, $3}')
UPLOAD=$(cat /tmp/speedtest.txt | grep "Upload" | awk '{print $2, $3}')
PING=$(cat /tmp/speedtest.txt | grep "Ping" | awk '{print $2, $3}')

if [[ -z "$DOWNLOAD" ]]; then
    echo -e "${RED}   Gagal/Timeout saat Speedtest.${NC}"
else
    echo -e "${BORDER_COLOR}┌──────────────────────────────────────────────────────┐${NC}"
    printf "${BORDER_COLOR}│${NC} ${PURPLE}PING${NC}      : %-37s ${BORDER_COLOR}│${NC}\n" "$PING"
    printf "${BORDER_COLOR}│${NC} ${GREEN}DOWNLOAD${NC} : %-37s ${BORDER_COLOR}│${NC}\n" "$DOWNLOAD"
    printf "${BORDER_COLOR}│${NC} ${CYAN}UPLOAD${NC}   : %-37s ${BORDER_COLOR}│${NC}\n" "$UPLOAD"
    echo -e "${BORDER_COLOR}└──────────────────────────────────────────────────────┘${NC}"
fi
rm -f /tmp/speedtest.txt
echo ""

# ======================================================
# FOOTER
# ======================================================
echo -e "${YELLOW}Press [ ENTER ] to back on menu...${NC}"
read
menu