#!/bin/bash
# ==========================================
#  PREMIUM CHECK VLESS (PERFECT ALIGNMENT V4)
#  MODIFIED BY GEMINI AI
# ==========================================

# --- CONFIG COLORS & SYMBOLS ---
R='\033[0m'             # Reset
P='\033[1;37m'          # Putih
M='\033[1;31m'          # Merah
H='\033[1;32m'          # Hijau
K='\033[1;33m'          # Kuning
C='\033[1;36m'          # Cyan
B='\033[1;34m'          # Biru
Kedip='\033[5m'         # Efek Kedip

# Background Blocks
BG_K='\033[43m\033[1;30m' # Kuning Block

# --- CONFIG LAYOUT (LEBAR TOTAL 55 KARAKTER) ---
ki="${C}│${R}"
ka="${C}│${R}"
Garis="${C}───────────────────────────────────────────────────────${R}"
Atas="${C}┌$Garis┐${R}"
Tengah="${C}├$Garis┤${R}"
Bawah="${C}└$Garis┘${R}"

# --- FUNGSI KONVERSI BYTES ---
function con() {
    local -i bytes=$1;
    if [[ $bytes -lt 1024 ]]; then
        echo "${bytes}B"
    elif [[ $bytes -lt 1048576 ]]; then
        echo "$(( (bytes + 1023)/1024 ))KB"
    elif [[ $bytes -lt 1073741824 ]]; then
        echo "$(( (bytes + 1048575)/1048576 ))MB"
    else
        echo "$(( (bytes + 1073741823)/1073741824 ))GB"
    fi
}

clear
echo -e ""
echo -e "           ${Kedip}${K}⚡  CHECK VLESS LOGIN  ⚡${R}"
echo -e ""

# --- 1. AMBIL DATA USER ---
data=( `cat /etc/xray/config.json | grep '#&' | cut -d ' ' -f 2 | sort | uniq`)

# Header Tampilan
echo -e "$Atas"
echo -e "$ki${BG_K}                 LIVE USER ACTIVITY                    ${R}$ka"
echo -e "$Tengah"

ada_online=0
LOG_FILE="/var/log/xray/access.log"

if [ ! -f "$LOG_FILE" ]; then
    # Error Message Width 55
    printf "$ki ${M}%-55s${R}$ka\n" "Error: Log file not found"
    echo -e "$Bawah"
    exit 0
fi

# --- 2. LOOPING DATA USER ---
for akun in "${data[@]}"; do
    if [[ -z "$akun" ]]; then akun="tidakada"; fi

    # --- 3. ANALISA LOG ---
    # Ambil daftar IP akses sukses 500 baris terakhir
    ip_list=$(grep "$akun" "$LOG_FILE" | grep "accepted" | tail -n 500 | awk '{print $3}' | sed 's/tcp://g' | cut -d ":" -f 1 | sort | uniq)
    jum_ip=$(echo "$ip_list" | sed '/^\s*$/d' | wc -l)

    # --- 4. TAMPILKAN JIKA ONLINE ---
    if [[ "$ip_list" != "" ]]; then
        ada_online=1
        
        # Ambil Waktu Login Terakhir
        raw_time=$(grep "$akun" "$LOG_FILE" | grep "accepted" | tail -n 1 | awk '{print $1, $2}')
        # Potong string waktu (YYYY/MM/DD HH:MM:SS) -> 19 Karakter
        clean_time="${raw_time:0:19}"
        
        # Data Limit
        iplimit=$(cat /etc/kyt/limit/vless/ip/${akun} 2>/dev/null || echo "0")
        byte_usage=$(cat /etc/limit/vless/${akun} 2>/dev/null || echo "0")
        usage=$(con ${byte_usage})
        byte_limit=$(cat /etc/vless/${akun} 2>/dev/null || echo "0")
        limit=$(con ${byte_limit})

        # Indikator Warna IP
        if [[ $jum_ip -gt $iplimit ]]; then warn_ip="${Kedip}${M}"; else warn_ip="${H}"; fi

        # --- OUTPUT CARD STYLE (FIXED WIDTH 55) ---
        # Rumus: Spasi + Konten + Spasi + Border = 55 Char Area
        
        # Baris 1: User & Status
        # 1 + 36 (User) + 1 + 16 (Status) + 1 = 55
        printf "$ki ${P}%-36s ${H}%16s ${R}$ka\n" "User : $akun" "[ONLINE]"
        echo -e "$Tengah"
        
        # Baris 2: Last Login
        # 2 + 13 (Label) + 1 + 1 + 1 + 37 (Value) = 55
        printf "$ki  ${C}%-13s ${P}: %-37s$ka\n" "Last Login" "$clean_time"
        
        # Baris 3: IP Access
        # 2 + 13 + 3 + 2 (IP) + 3 (Sep) + 32 (Dev) = 55
        printf "$ki  ${C}%-13s ${P}: ${warn_ip}%-2s${P} / %-32s$ka\n" "IP Access" "$jum_ip" "$iplimit Device"
        
        # Baris 4: Quota
        # 2 + 13 + 3 + 7 (Use) + 3 (Sep) + 27 (Lim) = 55
        printf "$ki  ${C}%-13s ${P}: ${K}%-7s${P} / %-27s$ka\n" "Quota Usage" "$usage" "$limit"
        
        echo -e "$Bawah"
    fi
done

# --- 5. HANDLING EMPTY ---
if [[ $ada_online -eq 0 ]]; then
    # Message Width 55
    printf "$ki ${M}%-55s${R}$ka\n" "       No active users found in recent logs."
    echo -e "$Bawah"
fi

echo -e ""
echo -e "${P} Monitor refreshed based on filtered logs.${R}"
echo -e ""
read -n 1 -s -r -p " Press any key to back on menu"
menu