#!/bin/bash
clear

# Mendefinisikan warna untuk pesan
export RED='\033[0;31m'
export GREEN='\033[0;32m'
export YELLOW='\033[0;33m'
export BLUE='\033[0;34m'
export PURPLE='\033[0;35m'
export CYAN='\033[0;36m'
export CYAN_BG='\033[46;1;97m'   # Latar belakang cyan cerah dengan teks putih
export LIGHT='\033[0;37m'
export PINK='\033[0;35m'
export ORANGE='\033[38;5;208m'
export PINK_BG='\033[45;1;97m'
export BIRU='\033[44;1;97m'
export RED_BG='\033[41;1;97m'   # Latar belakang pink cerah dengan teks putih
export NC='\033[0m'
export INDIGO='\033[38;5;54m'
export TEAL='\033[38;5;30m'
export WHITE='\033[1;37m'

# Baca variabel dari file
domain=$(cat /etc/data/domain)
userpanel=$(cat /etc/data/userpanel)
passpanel=$(cat /etc/data/passpanel)

# Path ke file database
DB_PATH="/var/lib/marzban/db.sqlite3"

# Menghitung pengguna aktif
ACTIVE_USERS=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM users WHERE status = 'active';")

# Menghitung pengguna dinonaktifkan
DISABLED_USERS=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM users WHERE status = 'disabled';")

# Menghitung pengguna kedaluwarsa
EXPIRED_USERS=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM users WHERE status = 'expired';")

# Menghitung pengguna terbatas
LIMITED_USERS=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM users WHERE status = 'limited';")

# Menghitung total akun
TOTAL_USERS=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM users;")

# Mengambil informasi sistem
OS=$(lsb_release -ds)
RAM=$(free -m | awk '/Mem:/ { print $2 }')
UPTIME=$(uptime -p)
IP_VPS=$(hostname -I | awk '{print $1}')
ISP=$(curl -s ipinfo.io/org)
DOMAIN=$(cat /etc/data/domain)

# Mengambil informasi IP lengkap dari ipinfo.io
IP_INFO=$(curl -s "http://ipinfo.io/$IP_VPS/json")
IP_REGION=$(echo "$IP_INFO" | jq -r '.region')
IP_COUNTRY=$(echo "$IP_INFO" | jq -r '.country')
IP_LOC=$(echo "$IP_INFO" | jq -r '.loc')

# Menghitung sisa hari
current_date=$(date +%Y-%m-%d)

# Fungsi del exp user
delete_expired_users() {
    # Hapus pengguna yang sudah expired dari database
    sqlite3 "$DB_PATH" "DELETE FROM users WHERE status = 'expired';"
    echo -e "${CYAN}[SUCCESS]${NC} Semua pengguna yang expired telah dihapus."
    echo -e "Silahkan kembali ke ${CYAN}[Menu]${NC} untuk melihat statusnya"
}

# Fungsi untuk mengambil total bandwidth menggunakan vnstat
vnstat_output=$(vnstat -y 1 --style 0 | sed -n 6p)
download=$(echo $vnstat_output | awk '{printf "%s %s", $2, $3}')
upload=$(echo $vnstat_output | awk '{printf "%s %s", $5, $6}')
total_usage=$(echo $vnstat_output | awk '{printf "%s %s", $8, $9}')

# Menggabungkan download dan upload menjadi satu baris
total_usage_line=$(printf "${TEAL}❖ ${WHITE}Total Usage    :${ORANGE} %s" "$total_usage ${CYAN}")
total_upload=$(printf "${TEAL}❖ ${WHITE}Total Upload   :${ORANGE} %s" "$upload ${CYAN}")
total_download=$(printf "${TEAL}❖ ${WHITE}Total Download :${ORANGE} %s" "$download ${CYAN}")


# Fungsi untuk mencetak teks dengan warna gradien menggunakan lolcat dan font yang lebih kecil
print_gradient_text() {
  local text="$1"
  if command -v lolcat &> /dev/null; then
    echo "$text" | figlet -f standard | lolcat
  else
    echo "$text" | figlet -f standard
  fi
}

# Teks yang ingin ditampilkan
text="SKARTI"

PINK='\033[35m'
CYAN='\033[36m'
WHITE='\033[37m'
NC='\033[0m'

# Fungsi untuk menampilkan menu pilihan
show_menu() {
    clear
    #print_gradient_text "$text"
    echo -e " ${TEAL}╭═══════════════════════════════════════════════════╮${NC}"
    echo -e " ${TEAL}│${NC}${RED_BG}            ❖ Marzban X SKT Tunneling ❖            ${NC}${TEAL}│${NC}"
    echo -e " ${TEAL}╰═══════════════════════════════════════════════════╯${NC}"
    echo -e " ${TEAL}╭───────────── 💠 ${WHITE}Users Information${TEAL} 💠 ─────────────╮${NC}"
    printf " ${TEAL}│\033[0m${NC} ✅ ${WHITE}Active${NC} : %-3d ${ORANGE}Users${NC}   ${TEAL}│${NC} ❌ ${WHITE}Disabled${NC} : %-3d ${ORANGE}Users${NC} ${TEAL}│\033[0m${NC}\n" "$ACTIVE_USERS" "$DISABLED_USERS"
    printf " ${TEAL}│\033[0m${NC} ⌛ ${WHITE}Total  ${NC}: %-3d ${ORANGE}Users${NC}   ${TEAL}│${NC} ⛔ ${WHITE}Expired${NC}  : %-3d ${ORANGE}Users${NC} ${TEAL}│\033[0m${NC}\n" "$TOTAL_USERS" "$EXPIRED_USERS"
    printf " ${TEAL}╰───────────────────────────────────────────────────╯${NC}\n"
    echo -e " ${TEAL}╭═══════════════════════════════════════════════════╮${NC}"
    echo -e " ${TEAL}│${NC}${RED_BG}              ❖ Login Panel Marzban ❖              ${NC}${TEAL}│${NC}"
    echo -e " ${TEAL}╰═══════════════════════════════════════════════════╯${NC}"
    echo -e " ${TEAL}╭──────────────── 🕊️ ${WHITE} Panel Access${TEAL} 🕊️  ───────────────╮${NC}"
    echo -e " ${TEAL}│ ❖${NC} ${WHITE}URL  :${NC} ${ORANGE}${domain}/dashboard${NC}" | tee -a log-install.txt
    echo -e " ${TEAL}│ ❖${NC} ${WHITE}User :${NC} ${ORANGE}${userpanel}${NC}" | tee -a log-install.txt
    echo -e " ${TEAL}│ ❖${NC} ${WHITE}Pass :${NC} ${ORANGE}${passpanel}${NC}" | tee -a log-install.txt
    printf " ${TEAL}╰───────────────────────────────────────────────────╯${NC}\n"
    echo -e " ${TEAL}╭═══════════════════════════════════════════════════╮${NC}"
    echo -e " ${TEAL}│${NC}${BIRU}                  ❖ MENU SERVICE ❖                 ${NC}${TEAL}│${NC}"
    echo -e " ${TEAL}╰═══════════════════════════════════════════════════╯${NC}"
    echo -e " ${TEAL}╭───────────────────────────────────────────────────╮${NC}"
    echo -e " ${TEAL}│\033[0m${NC} [${TEAL}01${NC}] ${WHITE}✦${NC} ${NC}Add Token  ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC} [${TEAL}08${NC}] ${WHITE}✦${NC} ${NC}Add Admin  ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC}"
    echo -e " ${TEAL}│\033[0m${NC} [${TEAL}02${NC}] ${WHITE}✦${NC} ${NC}Add Route  ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC} [${TEAL}09${NC}] ${WHITE}✦${NC} ${NC}Cek Admin  ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC}"
    echo -e " ${TEAL}│\033[0m${NC} [${TEAL}03${NC}] ${WHITE}✦${NC} ${NC}Cek Route  ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC} [${TEAL}10${NC}] ${WHITE}✦${NC} ${NC}Del Admin  ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC}"
    echo -e " ${TEAL}│\033[0m${NC} [${TEAL}04${NC}] ${WHITE}✦${NC} ${NC}Backup     ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC} [${TEAL}11${NC}] ${WHITE}✦${NC} ${NC}Del Exp    ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC}"
    echo -e " ${TEAL}│\033[0m${NC} [${TEAL}05${NC}] ${WHITE}✦${NC} ${NC}Restore    ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC} [${TEAL}12${NC}] ${WHITE}✦${NC} ${NC}Fix Nginx  ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC}"
    echo -e " ${TEAL}│\033[0m${NC} [${TEAL}06${NC}] ${WHITE}✦${NC} ${NC}BOT Notif  ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC} [${TEAL}13${NC}] ${WHITE}✦${NC} ${NC}Reboot     ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC}"
    echo -e " ${TEAL}│\033[0m${NC} [${TEAL}07${NC}] ${WHITE}✦${NC} ${NC}New Domain ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC} [${TEAL}14${NC}] ${WHITE}✦${NC} ${NC}Rebuild VM ${NC}[${NC}${TEAL}VIP${NC}${NC}]${NC} ${TEAL}│${NC}"
    echo -e " ${TEAL}╰───────────────────────────────────────────────────╯${NC}"
    echo -e ""
}

# Mengembalikan prompt terminal ke bentuk asli
PS1='root@localhost: '

# Menampilkan menu utama saat pertama kali menjalankan skrip
show_menu

# Memungkinkan pengguna menjalankan perintah lain dan kembali ke menu dengan mengetik 'menu'
    read -p " ➣ Your Choice : " input
echo -e ""
        case $input in
            1)
                echo -e "${TEAL}➣ Add Token selected${NC}"
                skt-token
                ;;
            2)
                echo -e "${TEAL}➣ Routing selected${NC}"
                skt-routing
                ;;
            3)
                echo -e "${TEAL}➣ Hasil Routing selected${NC}"
                skt-cek-routing
                ;;
            4)
                echo -e "${TEAL}➣ Backup Data selected${NC}"
                skt-backup
                ;;
            5)
                echo -e "${TEAL}➣ Restore Data selected${NC}"
                skt-restore
                ;;
            6)
                echo -e "${YELLOW}➣ BOT Notif selected${NC}"
                skt-bot-notif
                ;;
            7)
                echo -e "${YELLOW}➣ Change Domain selected${NC}"
                skt-change-domain
                ;;
            8)
                echo -e "${YELLOW}➣ Add Admin selected${NC}"
                marzban cli admin create
                ;;
            9)
                echo -e "${YELLOW}➣ Check Access selected${NC}"
                marzban cli admin list
                ;;
            10)
                echo -e "${YELLOW}➣ Delete Access selected${NC}"
                marzban cli admin delete
                ;;
            11)
                echo -e "${YELLOW}➣ Delete User Expired selected${NC}"
                delete_expired_users
                ;;
            12)
                echo -e "${YELLOW}➣ Fix Nginx selected${NC}"
                marzban restart
                ;;
            13)
                echo -e "${RES}➣ Reboot VM selected${NC}"
                reboot
                ;;
            14)
                echo -e "${RED}➣ Rebuild VPS selected${NC}"
                skt-rebuild-vps
                ;;
        esac
    
