#!/bin/bash
# ======================================================
#   HOKAGE LEGEND MONITOR TROJAN (FIXED BLINK)
# ======================================================

# --- DEFINISI WARNA ---
y='\033[1;33m' # Yellow / Gold
z='\033[96m'   # Cyan
NC='\033[0m'   # No Color
GREEN='\033[0;32m'
RED='\033[0;31m'
PURPLE='\033[1;35m' # Ungu Terang
BLINK='\033[5m'     # Efek Kedip

# ==================================================
# FUNGSI GRADASI
# ==================================================
print_gradient() {
    local text="$1"
    awk -v text="$text" 'BEGIN {
        len = length(text);
        rs=255; gs=215; bs=0;
        rm=0;   gm=128; bm=255;
        re=138; ge=43;  be=226;
        for (i=0; i<len; i++) {
            ratio = i / (len-1);
            if (ratio <= 0.5) {
                f = ratio * 2;
                r = int(rs + (rm - rs) * f);
                g = int(gs + (gm - gs) * f);
                b = int(bs + (bm - bs) * f);
            } else {
                f = (ratio - 0.5) * 2;
                r = int(rm + (re - rm) * f);
                g = int(gm + (ge - gm) * f);
                b = int(bm + (be - bm) * f);
            }
            printf "\033[38;2;%d;%d;%dm%s", r, g, b, substr(text, i+1, 1);
        }
        printf "\033[0m\n";
    }'
}

# ==================================================
# FUNGSI CETAK BARIS RAPI
# ==================================================
print_row() {
    local label="$1"
    local val_text="$2"
    # Bersihkan kode warna & blink untuk hitung panjang string asli
    local val_clean=$(echo -e "$val_text" | sed "s/\x1b\[[0-9;]*m//g")
    local len_val=${#val_clean}
    local max_space=30
    local pad_len=$(( max_space - len_val ))
    if [[ $pad_len -lt 0 ]]; then pad_len=0; fi
    local padding=""
    for ((i=0; i<pad_len; i++)); do padding+=" "; done
    echo -e " ${z}│${NC} ${y}$(printf "%-12s" "$label")${NC} : ${val_text}${padding}${z}│${NC}"
}

# --- Fungsi Konversi Byte ---
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 -n > /tmp/other.txt
# Ambil data user TROJAN
data=( `cat /etc/xray/config.json | grep '^#!' | cut -d ' ' -f 2 | sort | uniq`);

# --- Header Menu ---
echo -e ""
print_gradient "╭══════════════════════════════════════════════╮"
print_gradient "│           MONITOR TROJAN USER UTAMA          │"
print_gradient "╰══════════════════════════════════════════════╯"
echo -e ""

total_active=0

for akun in "${data[@]}"
do
    if [[ -z "$akun" ]]; then
        akun="tidakada"
    fi
    
    ((total_active++))

    # 1. Cek Log Akses
    echo -n > /tmp/iptrojan.txt
    
    # Cek Log (Ambil 500 baris terakhir agar cepat)
    jum=$(cat /var/log/xray/access.log | grep -w "$akun" | tail -n 500 | cut -d " " -f 3 | sed 's/tcp://g' | cut -d ":" -f 1 | sort | uniq)
    
    if [[ -n "$jum" ]]; then
        # === USER ONLINE ===
        echo "$jum" > /tmp/iptrojan.txt
        lastlogin_raw=$(cat /var/log/xray/access.log | grep -w "$akun" | tail -n 500 | cut -d " " -f 2 | tail -1)
        
        # [PERBAIKAN] Menggunakan kode \033[5;32m (Kedip Hijau) langsung
        # Agar tidak tertimpa oleh reset code
        lastlogin="${y}${lastlogin_raw}${NC} \033[5;32m[Online]${NC}"
        
        ip_count=$(cat /tmp/iptrojan.txt | wc -l)
    else
        # === USER OFFLINE ===
        lastlogin="${RED}Offline${NC}"
        ip_count=0
    fi

    # --- A. INFORMASI IP (Login) ---
    if [[ -e /etc/kyt/limit/trojan/ip/${akun} ]]; then
        iplimit=$(cat /etc/kyt/limit/trojan/ip/${akun})
    else
        iplimit="Unlimited"
    fi
    
    # Pewarnaan IP Login
    if [[ "$iplimit" != "Unlimited" && "$ip_count" -gt "$iplimit" ]]; then
        status_ip="${RED}${ip_count}/${iplimit} (OVER)${NC}"
    elif [[ "$ip_count" -gt 0 ]]; then
        # Angka IP Berkedip UNGU (Purple)
        status_ip="${BLINK}${PURPLE}${ip_count}${NC} / ${z}${iplimit}${NC}"
    else
        # Offline
        status_ip="${RED}${ip_count}${NC} / ${z}${iplimit}${NC}"
    fi

    # --- B. INFORMASI KUOTA ---
    if [[ -e /etc/limit/trojan/${akun} ]]; then 
            quota_bytes=$(cat /etc/limit/trojan/${akun})
            if [[ "$quota_bytes" -eq 0 || "$quota_bytes" == "0" ]]; then 
                lim="${z}Unlimited${NC}"
            else 
                lim=$(con ${quota_bytes})
            fi
    else 
            lim="${z}Unlimited${NC}" 
    fi
    
    # Usage Real-time
    downlink=$(xray api stats --server=127.0.0.1:10085 -name "user>>>${akun}>>>traffic>>>downlink" 2>/dev/null | grep -w "value" | awk '{print $2}' | sed 's/"//g')
    uplink=$(xray api stats --server=127.0.0.1:10085 -name "user>>>${akun}>>>traffic>>>uplink" 2>/dev/null | grep -w "value" | awk '{print $2}' | sed 's/"//g')

    if [[ -z "$downlink" ]]; then downlink=0; fi
    if [[ -z "$uplink" ]]; then uplink=0; fi
    
    total_usage=$((downlink + uplink))
    gb=$(con ${total_usage})
    
    # --- C. INFORMASI TANGGAL ---
    
    # Cari Tanggal Dibuat
    if [[ -e /etc/xray/trojan/${akun} ]]; then
        created_date=$(date -r "/etc/xray/trojan/${akun}" "+%Y-%m-%d")
    elif [[ -e /etc/limit/trojan/${akun} ]]; then
        created_date=$(date -r "/etc/limit/trojan/${akun}" "+%Y-%m-%d")
    elif [[ -e /etc/kyt/limit/trojan/ip/${akun} ]]; then
        created_date=$(date -r "/etc/kyt/limit/trojan/ip/${akun}" "+%Y-%m-%d")
    else
        created_date="Unknown"
    fi

    # Cari Tanggal Expired
    if [[ -e /etc/xray/trojan/${akun} ]]; then
        exp_date=$(cat "/etc/xray/trojan/${akun}")
    else
        exp_date=$(grep -E "^#! ${akun} " "/etc/xray/config.json" | awk '{print $3}' | sort | uniq | head -n 1)
    fi

    # Hitung Sisa Hari
    if [[ $exp_date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
        d1=$(date -d "$exp_date" +%s)
        d2=$(date -d "$(date +%Y-%m-%d)" +%s)
        sisa_hari=$(( (d1 - d2) / 86400 ))
        
        if [[ "$sisa_hari" -lt 0 ]]; then
            validity="${RED}Expired (${sisa_hari}d)${NC}"
        else
            # Sisa Hari Berkedip Hijau
            validity="\033[5;32m${sisa_hari} Hari${NC}"
        fi
    else
        exp_date="${z}Unlimited${NC}"
        validity="${GREEN}Unlimited${NC}"
    fi

    # --- TAMPILAN USER ---
    echo -e " ${z}╭══════════════════════════════════════════════╮${NC}"
    print_row "User" "$akun"
    print_row "Dibuat" "$created_date"
    print_row "Expired" "$exp_date"
    print_row "Masa Aktif" "$validity"
    print_row "Jam Login" "$lastlogin"
    print_row "Kuota" "$gb / $lim"
    print_row "IP Login" "$status_ip"
    echo -e " ${z}╰══════════════════════════════════════════════╯${NC}"

    rm -rf /tmp/iptrojan.txt
done
rm -rf /tmp/other.txt

if [[ $total_active -eq 0 ]]; then
    echo -e " ${RED}       Tidak ada user TROJAN yang terdaftar.${NC}"
fi

echo -e ""
print_gradient "════════════════════════════════════════════════"
echo -e ""