#!/bin/bash

# Pastikan jq terinstal
if ! command -v jq &> /dev/null
then
    echo "jq tidak ditemukan. Harap instal jq (misalnya: sudo apt-get install jq atau sudo yum install jq)."
    exit 1
fi

domain=$(cat /etc/data/domain)
token=$(cat /etc/data/token.json | jq -r .access_token)

# 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 BLUE_BG='\033[44;1;97m'
export PINK_BG='\033[45;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'

# // Export Banner Status Information
export ERROR="[${RED} ERROR ${NC}]";
export INFO="[${YELLOW} INFO ${NC}]";
export OKEY="[${GREEN} OKEY ${NC}]";
export PENDING="[${YELLOW} PENDING ${NC}]";
export SEND="[${YELLOW} SEND ${NC}]";
export RECEIVE="[${YELLOW} RECEIVE ${NC}]";

# Mengambil informasi sistem
OS=$(lsb_release -ds 2>/dev/null || cat /etc/*release | grep PRETTY_NAME | cut -d= -f2 | tr -d '"')

# Mengambil informasi pemakaian dan total RAM dalam MB
read TOTAL_MB USED_MB <<< $(free -m | awk 'NR==2 {print $2, $3}')

# Menghitung total RAM dalam GiB dan penggunaan RAM dalam MiB
TOTAL_GiB=$(awk "BEGIN {printf \"%.2f\", $TOTAL_MB/1024}")  # Konversi total RAM ke GiB
USED_MiB=$USED_MB  # Penggunaan RAM tetap dalam MiB

UPTIME_RAW=$(uptime -s) # Format raw untuk perhitungan
current_time=$(date "+%Y-%m-%d %H:%M:%S")
# total_uptime dihilangkan karena formatted_uptime lebih relevan dan langsung dari uptime -p
formatted_uptime=$(uptime -p | sed 's/up //') # Membersihkan output uptime -p
IP_VPS=$(curl -s ipinfo.io/ip )
ISP=$(curl -s ipinfo.io/org | cut -d " " -f 2-10 )
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')

# Menampilkan jumlah CPU core
CPU_CORES=$(nproc)

# Menampilkan penggunaan CPU (menggunakan top)
# Mendapatkan statistik CPU awal
CPU_STATS_START=(`grep 'cpu ' /proc/stat`)
PREV_IDLE=${CPU_STATS_START[4]}
PREV_TOTAL=0
for VALUE in "${CPU_STATS_START[@]:1}"; do
  PREV_TOTAL=$((PREV_TOTAL + VALUE))
done

# Tunggu sebentar untuk mendapatkan statistik yang diperbarui
sleep 1

# Mendapatkan statistik CPU setelah jeda
CPU_STATS_END=(`grep 'cpu ' /proc/stat`)
IDLE=${CPU_STATS_END[4]}
TOTAL=0
for VALUE in "${CPU_STATS_END[@]:1}"; do
  TOTAL=$((TOTAL + VALUE))
done

DIFF_IDLE=$((IDLE - PREV_IDLE))
DIFF_TOTAL=$((TOTAL - PREV_TOTAL))

# Pastikan DIFF_TOTAL tidak nol untuk menghindari division by zero
if [[ $DIFF_TOTAL -eq 0 ]]; then
    CPU_USAGE="0"
else
    CPU_USAGE=$(( (1000 * (DIFF_TOTAL - DIFF_IDLE) / DIFF_TOTAL + 5) / 10 ))
fi

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

# Menghitung pengguna aktif
if [ -f "$DB_PATH" ]; then
    ACTIVE_USERS=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM users WHERE status = 'active';" 2>/dev/null)
    TOTAL_USERS=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM users;" 2>/dev/null)
else
    ACTIVE_USERS="N/A"
    TOTAL_USERS="N/A"
    echo -e "${ERROR} Database Marzban tidak ditemukan di $DB_PATH."
fi


# Fungsi untuk mengambil total bandwidth menggunakan vnstat
# Memeriksa apakah vnstat terinstal
if ! command -v vnstat &> /dev/null
then
    INBOUND="N/A"
    OUTBOUND="N/A"
    echo -e "${ERROR} vnstat tidak ditemukan. Bandwidth tidak dapat ditampilkan."
else
    vnstat_output=$(vnstat -y 1 --style 0 2>/dev/null | sed -n 6p)
    if [[ -n "$vnstat_output" ]]; then
        INBOUND=$(echo "$vnstat_output" | awk '{printf "%s%s", $2, $3}')
        OUTBOUND=$(echo "$vnstat_output" | awk '{printf "%s%s", $5, $6}')
    else
        INBOUND="N/A"
        OUTBOUND="N/A"
        echo -e "${ERROR} Gagal mendapatkan data dari vnstat. Pastikan vnstat berjalan dengan benar."
    fi
fi


# // VAR
if netstat -ntlp | grep -q "0.0.0.0:8081.*nginx"; then
    NGINX="${GREEN}Okay${NC}";
else
    NGINX="${RED}Not Okay${NC}";
fi

if netstat -ntlp | grep -q "127.0.0.1:7879.*python"; then
    MARZ="${GREEN}Okay${NC}";
else
    MARZ="${RED}Not Okay${NC}";
fi

if systemctl is-active --quiet ufw; then
    UFW="${GREEN}Okay${NC}";
else
    UFW="${RED}Not Okay${NC}";
fi

if systemctl is-active --quiet docker; then
    DOCKER="${GREEN}Okay${NC}";
else
    DOCKER="${RED}Not Okay${NC}";
fi

# Asumsi wireproxy adalah service Xray. Sesuaikan jika Xray dijalankan dengan nama service lain
if systemctl is-active --quiet wireproxy || systemctl is-active --quiet xray; then
    XRAY="${GREEN}Okay${NC}";
else
    XRAY="${RED}Not Okay${NC}";
fi

# Fungsi untuk mengambil informasi sistem dari Marzban API
function get_marzban_info() {
    local marzban_api="https://${domain}/api/system"
    local marzban_info=$(curl -s -X 'GET' "$marzban_api" -H 'accept: application/json' -H "Authorization: Bearer $token")

    if [[ $? -eq 0 && -n "$marzban_info" ]]; then
        marzban_version=$(echo "$marzban_info" | jq -r '.version')
    else
        marzban_version="N/A"
        echo -e "${ERROR} Gagal mengambil informasi Marzban API. Pastikan Marzban berjalan dan token/domain benar."
    fi
}
# Panggil fungsi ini (tidak perlu argumen karena sudah menggunakan variabel global)
get_marzban_info

# Mengambil versi Marzban dari docker-compose.yml
versimarzban=$(grep 'image: gozargah/marzban:' /opt/marzban/docker-compose.yml 2>/dev/null | awk -F: '{print $3}')
if [[ -z "$versimarzban" ]]; then
  versimarzban="N/A"
fi
# Ganti nilai dan versi spesifik
case "${versimarzban}" in
    "latest") versimarzban_status="Stable";;
    "dev") versimarzban_status="Beta";;
    *) versimarzban_status="";; # Biarkan kosong jika tidak cocok
esac

# Fungsi untuk mendapatkan versi Xray Core
function get_xray_core_version() {
    local xray_core_info=$(curl -s -X 'GET' \
        "https://${domain}/api/core" \
        -H 'accept: application/json' \
        -H "Authorization: Bearer ${token}"
    )
    if [[ $? -eq 0 && -n "$xray_core_info" ]]; then
        echo "$xray_core_info" | jq -r '.version'
    else
        echo "N/A"
    fi
}
# Dapatkan versi Xray Core
xray_core_version=$(get_xray_core_version)


    neofetch --disable title packages shell uptime
    echo -e "Selamat datang di Layanan AutoScript Skarti x Marzban"
    echo -e "Ketik ${TEAL}Menu${NC} untuk menampilkan daftar perintah !"
    echo -e ""
    echo -e "${TEAL}—————————————————————————————————————————————————${NC}"
    echo -e "${BLUE_BG}            ❖ Service Information ❖              ${NC}"
    echo -e "${TEAL}—————————————————————————————————————————————————${NC}"
    echo -e "✙ Docker Container    : ${DOCKER}"
    echo -e "✙ Nginx               : ${NGINX}"
    echo -e "✙ Firewall            : ${UFW}"
    echo -e "✙ Marzban Panel       : ${MARZ}"
    echo -e "${TEAL}—————————————————————————————————————————————————${NC}"
    echo -e "${YELLOW}[INFO]${NC} Jika Ada Service Yang Error [Restart NGINX] "
    echo -e "${TEAL}—————————————————————————————————————————————————${NC}"
    echo -e ""
    echo -e "${TEAL}—————————————————————————————————————————————————${NC}"
    echo -e "${BLUE_BG}        ❖ Marzban System Information ❖           ${NC}"
    echo -e "${TEAL}—————————————————————————————————————————————————${NC}"
    echo -e "✙ Marzban Version           : ${GREEN}${marzban_version}${NC} ${BLUE}${versimarzban_status}${NC}"
    echo -e "✙ XrayCore Version          : ${GREEN}Xray ${xray_core_version}${NC}"
    echo -e "✙ Memory Usage              : ${USED_MiB}MiB/${TOTAL_MB}MiB"
    echo -e "✙ CPU Cores                 : ${CPU_CORES} cores"
    echo -e "✙ CPU Usage                 : ${CPU_USAGE}%"
    echo -e "✙ Total Users               : $ACTIVE_USERS"/"$TOTAL_USERS"
    echo -e "✙ Inbound Bandwidth         : ${INBOUND}"
    echo -e "✙ Outbound Bandwidth        : ${OUTBOUND}"
    echo -e "${TEAL}—————————————————————————————————————————————————${NC}"
    echo -e "${YELLOW}[INFO]${NC} Sebaik Baiknya Amal Adalah Shalat Juragan !"
    echo -e "${TEAL}—————————————————————————————————————————————————${NC}"