#!/bin/bash
# ==========================================
#  ZIVPN ULTIMATE INSTALLER (HOKAGE LEGEND)
#  Updated: Skip Limit-Quota File Creation
# ==========================================

# --- WARNA ---
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m'

clear
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "      ZIVPN AUTO-INSTALLER WITH SMART MONITOR     "
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"

# ==========================================
#  1. PRE-INSTALL: CEK & HAPUS VERSI LAMA
# ==========================================
echo -e "\n${YELLOW}[1/7] Memeriksa Instalasi Sebelumnya...${NC}"

if [[ -f /etc/systemd/system/zivpn.service ]] || [[ -d /etc/zivpn ]]; then
    echo -e "   ⚠️  Terdeteksi instalasi ZiVPN lama. Membersihkan..."
    
    # Matikan Service
    systemctl stop zivpn >/dev/null 2>&1
    systemctl disable zivpn >/dev/null 2>&1
    
    # Hapus File Service & Config
    rm -f /etc/systemd/system/zivpn.service
    rm -rf /etc/zivpn
    
    # Hapus Script Menu & Tools Lama (KECUALI limit-quota)
    rm -f /usr/local/sbin/zivpn-menu
    rm -f /usr/local/sbin/xp-zivpn
    # rm -f /usr/local/sbin/limit-quota  <-- BARIS INI DIHAPUS AGAR FILE AMAN
    
    # Bersihkan Cronjob Lama
    if [ -f /var/spool/cron/crontabs/root ]; then
        sed -i '/xp-zivpn/d' /var/spool/cron/crontabs/root
        sed -i '/limit-quota/d' /var/spool/cron/crontabs/root
    fi
    
    # Reload Systemd
    systemctl daemon-reload
    echo -e "   ✅ Instalasi lama dibersihkan (Limit Quota dipertahankan)."
else
    echo -e "   ✅ Tidak ada instalasi sebelumnya. Lanjut..."
fi

# ==========================================
#  2. INSTALL CORE ZIVPN
# ==========================================
echo -e "\n${GREEN}[2/7] Mengunduh & Menginstall Core ZiVPN...${NC}"
wget -q -O zi.sh https://raw.githubusercontent.com/zahidbd2/udp-zivpn/main/zi.sh
chmod +x zi.sh
./zi.sh >/dev/null 2>&1
rm -f zi.sh

# ==========================================
#  3. PERSIAPAN DATABASE
# ==========================================
echo -e "${GREEN}[3/7] Mempersiapkan Database...${NC}"
mkdir -p /etc/zivpn
# Buat database kosong jika belum ada
if [ ! -f "/etc/zivpn/user-db.json" ]; then
    echo "{}" > /etc/zivpn/user-db.json
fi
# Install tools pendukung
apt-get update -y >/dev/null 2>&1
apt-get install -y jq curl net-tools cron bc >/dev/null 2>&1

# ==========================================
#  4. SCRIPT AUTO-DELETE (XP)
# ==========================================
echo -e "${GREEN}[4/7] Memasang Sistem Auto-Delete (XP)...${NC}"
cat <<'EOF' > /usr/local/sbin/xp-zivpn
#!/bin/bash
CONFIG_FILE="/etc/zivpn/config.json"
USER_DB="/etc/zivpn/user-db.json"
SERVICE_NAME="zivpn.service"
now_sec=$(date +%s)

if [[ ! -f "$USER_DB" || ! -f "$CONFIG_FILE" ]]; then exit 0; fi
RESTART_REQUIRED=false

# Cek user expired
jq -r 'to_entries[] | "\(.key)|\(.value.exp)"' "$USER_DB" | while IFS='|' read -r username exp_date; do
    if [[ "$exp_date" == "null" || -z "$exp_date" ]]; then continue; fi
    exp_sec=$(date -d "$exp_date" +%s 2>/dev/null)
    if [[ $? -ne 0 ]]; then continue; fi
    
    if [[ $exp_sec -lt $now_sec ]]; then
        # Hapus user dari Config (Login) & Database
        jq --arg u "$username" '.auth.config -= [$u]' "$CONFIG_FILE" > "${CONFIG_FILE}.tmp" && mv "${CONFIG_FILE}.tmp" "$CONFIG_FILE"
        jq --arg u "$username" 'del(.[$u])' "$USER_DB" > "${USER_DB}.tmp" && mv "${USER_DB}.tmp" "$USER_DB"
        RESTART_REQUIRED=true
        echo "$(date): User $username EXPIRED and deleted." >> /var/log/zivpn-xp.log
    fi
done

# Restart service jika ada yang dihapus
if [ "$RESTART_REQUIRED" = true ]; then systemctl restart "$SERVICE_NAME"; fi
EOF
chmod +x /usr/local/sbin/xp-zivpn

# ==========================================
#  5. KONFIGURASI LIMIT QUOTA (SKIP CREATION)
# ==========================================
echo -e "${GREEN}[5/7] Mengkonfigurasi Limit Quota...${NC}"

if [ -f "/usr/local/sbin/limit-quota" ]; then
    chmod +x /usr/local/sbin/limit-quota
    echo -e "   ✅ File 'limit-quota' ditemukan. Izin eksekusi diberikan."
else
    echo -e "   ⚠️  PERINGATAN: File '/usr/local/sbin/limit-quota' TIDAK DITEMUKAN!"
    echo -e "       Fitur limit kuota mungkin tidak berjalan."
fi

# ==========================================
#  6. PASANG CRON JOB (XP & LIMIT)
# ==========================================
echo -e "${GREEN}[6/7] Mengaktifkan Cron Job Otomatis...${NC}"

# Hapus cron lama jika ada duplikat
sed -i '/xp-zivpn/d' /var/spool/cron/crontabs/root
sed -i '/limit-quota/d' /var/spool/cron/crontabs/root

# Tambahkan Cron Baru
# 1. XP (Hapus Expired) jalan setiap jam 00:00
echo "0 0 * * * /usr/local/sbin/xp-zivpn >> /var/log/xp-zivpn.log 2>&1" >> /var/spool/cron/crontabs/root

# 2. Limit Quota jalan setiap 5 Menit
echo "*/5 * * * * /usr/local/sbin/limit-quota >> /dev/null 2>&1" >> /var/spool/cron/crontabs/root

service cron restart >/dev/null 2>&1

# ==========================================
#  7. FINALISASI & FIX UDP EXCLUDE
# ==========================================
echo -e "\n${GREEN}[7/7] Membersihkan & Restarting Services...${NC}"

# Ambil Port ZiVPN Terbaru
PORT_ZIVPN=$(grep -o '"listen": *"[^"]*"' /etc/zivpn/config.json | cut -d'"' -f4 | sed 's/://g' | sed 's/0.0.0.0//g')
[ -z "$PORT_ZIVPN" ] && PORT_ZIVPN="5667"

# Fix Exclude Port di UDP Custom agar tidak bentrok
if [ -f "/etc/systemd/system/udp-custom.service" ]; then
    sed -i "s|server -exclude .*|server -exclude 22,53,68,$PORT_ZIVPN|g" /etc/systemd/system/udp-custom.service
    systemctl daemon-reload
    systemctl restart udp-custom
fi

clear
echo "============================================"
echo "      INSTALLASI SELESAI & AKTIF"
echo "============================================"
echo " - ZiVPN Service : RUNNING"
echo " - UDP Custom    : RUNNING"
echo " - Auto Expired  : ACTIVE (Setiap 00:00)"
echo " - Auto Limit    : ACTIVE (Cek tiap 5 Menit)"
echo " - Menu Pro      : Ketik 'zivpn-menu'"
echo "============================================"
