#!/bin/bash

BASE_URL="https://autoscript.interflazz.my.id/v2"
BRAND="INTERFLAZZ.MY.ID"
WHATSAPP="https://wa.me/6285956131443"
TELEGRAM="https://t.me/interflazz"

green="\e[38;5;82m"
red="\e[38;5;196m"
neutral="\e[0m"
orange="\e[38;5;130m"
blue="\e[38;5;39m"
yellow="\e[38;5;226m"
purple="\e[38;5;141m"
bold_white="\e[1;37m"
reset="\e[0m"
pink="\e[38;5;205m"
white="\e[38;5;255m"
cyan="\e[38;5;51m"

update_box_width() {
    local cols

    cols=$(tput cols 2>/dev/null || echo 80)

    if [ "$cols" -gt 72 ]; then
        BOX_WIDTH=72
    elif [ "$cols" -lt 30 ]; then
        BOX_WIDTH=30
    else
        BOX_WIDTH=$((cols - 2))
    fi

    BOX_INNER=$((BOX_WIDTH - 4))
}

repeat_char() {
    local count="$1"
    local char="$2"
    local line

    printf -v line '%*s' "$count" ""
    printf '%s' "${line// /$char}"
}

box_top() {
    update_box_width

    printf "%b┌" "$orange"
    repeat_char $((BOX_WIDTH - 2)) "─"
    printf "┐%b\n" "$reset"
}

box_middle() {
    update_box_width

    printf "%b├" "$orange"
    repeat_char $((BOX_WIDTH - 2)) "─"
    printf "┤%b\n" "$reset"
}

box_bottom() {
    update_box_width

    printf "%b└" "$orange"
    repeat_char $((BOX_WIDTH - 2)) "─"
    printf "┘%b\n" "$reset"
}

box_empty() {
    update_box_width

    printf "%b│%b" "$orange" "$reset"
    printf "%*s" $((BOX_WIDTH - 2)) ""
    printf "%b│%b\n" "$orange" "$reset"
}

box_center() {
    update_box_width

    local text="$1"
    local color="${2:-$white}"
    local length=${#text}
    local available="$BOX_INNER"

    if [ "$length" -gt "$available" ]; then
        box_left "$text" "$color"
        return
    fi

    local left=$(((available - length) / 2))
    local right=$((available - length - left))

    printf "%b│%b " "$orange" "$reset"
    printf "%*s" "$left" ""
    printf "%b%s%b" "$color" "$text" "$reset"
    printf "%*s" "$right" ""
    printf " %b│%b\n" "$orange" "$reset"
}

box_left() {
    update_box_width

    local text="$1"
    local color="${2:-$white}"
    local available="$BOX_INNER"
    local length=${#text}
    local offset=0
    local part
    local part_length
    local right

    if [ "$length" -eq 0 ]; then
        box_empty
        return
    fi

    while [ "$offset" -lt "$length" ]; do
        part="${text:$offset:$available}"
        part_length=${#part}
        right=$((available - part_length))

        printf "%b│%b " "$orange" "$reset"
        printf "%b%s%b" "$color" "$part" "$reset"
        printf "%*s" "$right" ""
        printf " %b│%b\n" "$orange" "$reset"

        offset=$((offset + available))
    done
}

show_access_denied() {
    local reason="$1"

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "AUTOSCRIPT PREMIUM" "$bold_white"
    box_middle
    box_center "AKSES DITOLAK!" "$red"
    box_middle
    box_left "IP VPS : $vps_ip" "$yellow"
    box_left "$reason" "$yellow"
    box_middle
    box_center "HUBUNGI ADMIN" "$bold_white"
    box_left "WhatsApp ~ $WHATSAPP" "$green"
    box_left "Telegram ~ $TELEGRAM" "$cyan"
    box_bottom

    exit 1
}

show_header() {
    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "PENGATURAN SISTEM" "$bold_white"
    box_bottom
}

pause_menu() {
    echo ""
    read -n 1 -s -r -p "Tekan tombol apa saja untuk kembali ke menu..."
    echo ""
}

service_exists() {
    local service="$1"

    systemctl list-unit-files "${service}.service" 2>/dev/null |
        grep -q "^${service}.service"
}

restart_single_service() {
    local service="$1"

    if ! service_exists "$service"; then
        printf "  %-24s : %bTIDAK TERSEDIA%b\n" \
            "$service" \
            "$yellow" \
            "$reset"
        return 1
    fi

    if systemctl restart "$service" >/dev/null 2>&1; then
        printf "  %-24s : %bBERHASIL%b\n" \
            "$service" \
            "$green" \
            "$reset"
        return 0
    fi

    printf "  %-24s : %bGAGAL%b\n" \
        "$service" \
        "$red" \
        "$reset"

    return 1
}

restart_services() {
    local services=(
        "ssh"
        "dropbear"
        "ws"
        "openvpn"
        "nginx"
        "haproxy"
        "vmess@config"
        "vless@config"
        "trojan@config"
        "shadowsocks@config"
    )

    local service

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "RESTART SEMUA LAYANAN" "$bold_white"
    box_bottom

    echo ""

    for service in "${services[@]}"; do
        restart_single_service "$service"
    done

    echo ""

    box_top
    box_center "PROSES RESTART SELESAI" "$green"
    box_bottom

    pause_menu
}

check_bw() {
    local choice
    local period

    while true; do
        clear

        box_top
        box_center "$BRAND" "$green"
        box_center "STATISTIK BANDWIDTH VNSTAT" "$bold_white"
        box_bottom

        echo ""

        if ! command -v vnstat >/dev/null 2>&1; then
            box_top
            box_center "VNSTAT TIDAK TERPASANG" "$red"
            box_middle
            box_left "Install vnstat terlebih dahulu." "$yellow"
            box_bottom

            pause_menu
            return
        fi

        vnstat 2>/dev/null

        echo ""

        box_top
        box_center "MENU BANDWIDTH" "$bold_white"
        box_middle
        box_left "1. Tampilkan detail bandwidth" "$green"
        box_left "2. Kembali" "$green"
        box_bottom

        echo ""

        read -rp "Pilih menu [1-2] : " choice

        case "$choice" in
            1)
                echo ""

                box_top
                box_center "PILIH PERIODE" "$bold_white"
                box_middle
                box_left "1. Hari ini" "$green"
                box_left "2. Harian" "$green"
                box_left "3. Bulanan" "$green"
                box_left "4. Tahunan" "$green"
                box_bottom

                echo ""

                read -rp "Pilih periode [1-4] : " period

                echo ""

                case "$period" in
                    1)
                        vnstat -d 2>/dev/null
                        ;;
                    2)
                        vnstat -d 2>/dev/null
                        ;;
                    3)
                        vnstat -m 2>/dev/null
                        ;;
                    4)
                        vnstat -y 2>/dev/null
                        ;;
                    *)
                        echo -e "${red}Pilihan tidak valid.${reset}"
                        ;;
                esac

                pause_menu
                ;;
            2)
                return
                ;;
            *)
                echo -e "${red}Pilihan tidak valid.${reset}"
                sleep 1
                ;;
        esac
    done
}

info_port() {
    local reboot_time

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "INFORMASI PORT" "$bold_white"
    box_middle
    box_left "OpenSSH         : 22, 443, 80" "$white"
    box_left "Dropbear        : 443, 109, 143" "$white"
    box_left "SSH WebSocket   : 80, 443" "$white"
    box_left "OpenVPN         : 443, 1194, 2200" "$white"
    box_left "Nginx           : 80, 81, 443" "$white"
    box_left "HAProxy         : 80, 443" "$white"
    box_left "DNS             : 53, 443" "$white"
    box_left "XRAY VMess      : 80, 443" "$white"
    box_left "XRAY VLESS      : 80, 443" "$white"
    box_left "XRAY Trojan     : 443" "$white"
    box_left "XRAY Shadowsocks: 443" "$white"
    box_middle
    box_left "Zona Waktu      : Asia/Jakarta (GMT+7)" "$yellow"

    if [ -f "/etc/cron.d/daily_reboot" ]; then
        reboot_time=$(
            awk '
                /^[0-9]+[[:space:]]+[0-9]+/ {
                    printf "%02d:%02d", $2, $1
                    exit
                }
            ' /etc/cron.d/daily_reboot
        )

        if [ -n "$reboot_time" ]; then
            box_left "Auto Reboot     : ${reboot_time} WIB" "$yellow"
        else
            box_left "Auto Reboot     : Tidak Diatur" "$yellow"
        fi
    else
        box_left "Auto Reboot     : Tidak Diatur" "$yellow"
    fi

    box_left "Auto Hapus Exp  : Aktif" "$yellow"
    box_bottom

    pause_menu
}

restore_web_services() {
    systemctl start haproxy >/dev/null 2>&1 || true
    systemctl start nginx >/dev/null 2>&1 || true
}

change_domain() {
    local new_domain
    local current_domain
    local server_ip
    local domain_ip

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "UBAH DOMAIN VPS" "$bold_white"
    box_bottom

    echo ""

    current_domain=$(cat /etc/xray/domain 2>/dev/null)

    if [ -n "$current_domain" ]; then
        echo -e "Domain saat ini : ${green}${current_domain}${reset}"
    else
        echo -e "Domain saat ini : ${yellow}Belum diatur${reset}"
    fi

    echo ""

    read -rp "Masukkan domain baru : " new_domain

    new_domain=$(echo "$new_domain" | tr '[:upper:]' '[:lower:]' | xargs)

    if [ -z "$new_domain" ]; then
        echo -e "${red}Domain tidak boleh kosong.${reset}"
        pause_menu
        return
    fi

    if ! [[ "$new_domain" =~ ^([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$ ]]; then
        echo -e "${red}Format domain tidak valid.${reset}"
        pause_menu
        return
    fi

    server_ip=$(curl -4 -s --max-time 10 ipv4.icanhazip.com)
    domain_ip=$(getent ahostsv4 "$new_domain" 2>/dev/null | awk 'NR==1 {print $1}')

    if [ -z "$domain_ip" ]; then
        echo -e "${red}Domain belum memiliki record IPv4 yang dapat dibaca.${reset}"
        pause_menu
        return
    fi

    if [ "$server_ip" != "$domain_ip" ]; then
        echo ""
        echo -e "${red}Domain belum mengarah ke IP VPS.${reset}"
        echo -e "IP VPS    : ${yellow}${server_ip}${reset}"
        echo -e "IP Domain : ${yellow}${domain_ip}${reset}"
        pause_menu
        return
    fi

    echo ""
    echo -e "${yellow}Menghentikan Nginx dan HAProxy...${reset}"

    systemctl stop nginx >/dev/null 2>&1 || true
    systemctl stop haproxy >/dev/null 2>&1 || true

    mkdir -p /etc/xray

    printf '%s\n' "$new_domain" >/etc/xray/domain

    if [ ! -x "/root/.acme.sh/acme.sh" ]; then
        restore_web_services

        echo -e "${red}acme.sh tidak ditemukan.${reset}"
        pause_menu
        return
    fi

    echo -e "${yellow}Memproses sertifikat SSL...${reset}"

    /root/.acme.sh/acme.sh \
        --upgrade \
        --auto-upgrade \
        >/dev/null 2>&1 || true

    /root/.acme.sh/acme.sh \
        --set-default-ca \
        --server letsencrypt \
        >/dev/null 2>&1 || true

    if ! /root/.acme.sh/acme.sh \
        --issue \
        -d "$new_domain" \
        --standalone \
        -k ec-256 \
        --force \
        >/dev/null 2>&1; then

        restore_web_services

        echo -e "${red}Gagal mendapatkan sertifikat SSL.${reset}"
        pause_menu
        return
    fi

    if ! /root/.acme.sh/acme.sh \
        --install-cert \
        -d "$new_domain" \
        --fullchain-file /etc/xray/xray.crt \
        --key-file /etc/xray/xray.key \
        --ecc \
        >/dev/null 2>&1; then

        restore_web_services

        echo -e "${red}Gagal memasang sertifikat SSL.${reset}"
        pause_menu
        return
    fi

    if [ -f "/etc/xray/xray.crt" ] &&
       [ -f "/etc/xray/xray.key" ]; then
        cat /etc/xray/xray.crt /etc/xray/xray.key \
            >/etc/haproxy/rs.pem

        chmod 600 /etc/xray/xray.key
        chmod 644 /etc/xray/xray.crt
        chmod 600 /etc/haproxy/rs.pem 2>/dev/null || true
    fi

    restore_web_services

    systemctl restart haproxy >/dev/null 2>&1 || true
    systemctl restart nginx >/dev/null 2>&1 || true

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "DOMAIN BERHASIL DIPERBARUI" "$bold_white"
    box_middle
    box_left "Domain Lama : ${current_domain:-Belum diatur}" "$white"
    box_left "Domain Baru : $new_domain" "$green"
    box_middle
    box_center "Sertifikat SSL berhasil diperbarui." "$green"
    box_bottom

    pause_menu
}

change_ns() {
    local new_ns
    local old_ns

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "UBAH NAMESERVER" "$bold_white"
    box_bottom

    echo ""

    old_ns=$(cat /etc/xray/dns 2>/dev/null)

    if [ -n "$old_ns" ]; then
        echo -e "Nameserver saat ini : ${green}${old_ns}${reset}"
    else
        echo -e "Nameserver saat ini : ${yellow}Belum diatur${reset}"
    fi

    echo ""

    read -rp "Masukkan nameserver baru : " new_ns

    new_ns=$(echo "$new_ns" | tr '[:upper:]' '[:lower:]' | xargs)

    if [ -z "$new_ns" ]; then
        echo -e "${red}Nameserver tidak boleh kosong.${reset}"
        pause_menu
        return
    fi

    if ! [[ "$new_ns" =~ ^([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$ ]]; then
        echo -e "${red}Format nameserver tidak valid.${reset}"
        pause_menu
        return
    fi

    mkdir -p /etc/xray
    printf '%s\n' "$new_ns" >/etc/xray/dns

    if [ -n "$old_ns" ]; then
        if [ -f "/etc/systemd/system/dnstt-client.service" ]; then
            sed -i "s|${old_ns}|${new_ns}|g" \
                /etc/systemd/system/dnstt-client.service
        fi

        if [ -f "/etc/systemd/system/dnstt-server.service" ]; then
            sed -i "s|${old_ns}|${new_ns}|g" \
                /etc/systemd/system/dnstt-server.service
        fi
    fi

    systemctl daemon-reload

    local server_status="Tidak tersedia"
    local client_status="Tidak tersedia"

    if systemctl list-unit-files dnstt-server.service \
        >/dev/null 2>&1; then

        if systemctl restart dnstt-server >/dev/null 2>&1; then
            server_status="Berhasil"
        else
            server_status="Gagal"
        fi
    fi

    if systemctl list-unit-files dnstt-client.service \
        >/dev/null 2>&1; then

        if systemctl restart dnstt-client >/dev/null 2>&1; then
            client_status="Berhasil"
        else
            client_status="Gagal"
        fi
    fi

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "NAMESERVER DIPERBARUI" "$bold_white"
    box_middle
    box_left "NS Lama         : ${old_ns:-Belum diatur}" "$white"
    box_left "NS Baru         : $new_ns" "$green"
    box_left "DNSTT Server    : $server_status" "$white"
    box_left "DNSTT Client    : $client_status" "$white"
    box_bottom

    pause_menu
}

check_status_text() {
    local service="$1"

    if systemctl is-active --quiet "$service" 2>/dev/null; then
        printf "AKTIF"
    else
        printf "MATI"
    fi
}

show_service_status() {
    local label="$1"
    local service="$2"
    local status

    status=$(check_status_text "$service")

    if [ "$status" = "AKTIF" ]; then
        box_left "${label} : AKTIF" "$green"
    else
        box_left "${label} : MATI" "$red"
    fi
}

running() {
    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "STATUS LAYANAN SERVER" "$bold_white"
    box_middle
    show_service_status "OpenSSH         " "ssh"
    show_service_status "Dropbear        " "dropbear"
    show_service_status "SSH WebSocket   " "ws"
    show_service_status "OpenVPN         " "openvpn"
    show_service_status "Nginx           " "nginx"
    show_service_status "HAProxy         " "haproxy"
    show_service_status "XRAY VMess      " "vmess@config"
    show_service_status "XRAY VLESS      " "vless@config"
    show_service_status "XRAY Trojan     " "trojan@config"
    show_service_status "XRAY Shadowsocks" "shadowsocks@config"
    box_bottom

    pause_menu
}

auto_backup() {
    local status
    local pilihan

    while true; do
        if [ -f "/etc/cron.d/backup" ]; then
            status="AKTIF"
        else
            status="NONAKTIF"
        fi

        clear

        box_top
        box_center "$BRAND" "$green"
        box_center "PENGATURAN AUTO BACKUP" "$bold_white"
        box_middle
        box_left "Status Auto Backup : $status" "$yellow"
        box_middle
        box_left "1. Setiap 6 Jam" "$green"
        box_left "2. Setiap 1 Hari" "$green"
        box_left "3. Setiap 1 Minggu" "$green"
        box_left "4. Setiap 1 Bulan" "$green"
        box_left "5. Nonaktifkan Auto Backup" "$red"
        box_left "X. Kembali" "$white"
        box_bottom

        echo ""

        read -rp "Pilih menu [1-5/X] : " pilihan

        case "$pilihan" in
            1)
                cat >/etc/cron.d/backup <<'EOF'
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */6 * * * root /usr/bin/backuprestore backup
EOF
                chmod 644 /etc/cron.d/backup
                systemctl restart cron >/dev/null 2>&1 || true
                echo -e "${green}Auto Backup diatur setiap 6 jam.${reset}"
                pause_menu
                ;;
            2)
                cat >/etc/cron.d/backup <<'EOF'
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 0 * * * root /usr/bin/backuprestore backup
EOF
                chmod 644 /etc/cron.d/backup
                systemctl restart cron >/dev/null 2>&1 || true
                echo -e "${green}Auto Backup diatur setiap 1 hari.${reset}"
                pause_menu
                ;;
            3)
                cat >/etc/cron.d/backup <<'EOF'
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 0 * * 0 root /usr/bin/backuprestore backup
EOF
                chmod 644 /etc/cron.d/backup
                systemctl restart cron >/dev/null 2>&1 || true
                echo -e "${green}Auto Backup diatur setiap 1 minggu.${reset}"
                pause_menu
                ;;
            4)
                cat >/etc/cron.d/backup <<'EOF'
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 0 1 * * root /usr/bin/backuprestore backup
EOF
                chmod 644 /etc/cron.d/backup
                systemctl restart cron >/dev/null 2>&1 || true
                echo -e "${green}Auto Backup diatur setiap 1 bulan.${reset}"
                pause_menu
                ;;
            5)
                rm -f /etc/cron.d/backup
                systemctl restart cron >/dev/null 2>&1 || true
                echo -e "${green}Auto Backup berhasil dinonaktifkan.${reset}"
                pause_menu
                ;;
            x|X)
                return
                ;;
            *)
                echo -e "${red}Pilihan tidak valid.${reset}"
                sleep 1
                ;;
        esac
    done
}

setup_bot_telegram() {
    local bot_token_input
    local chat_id_input

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "SETUP BOT TELEGRAM" "$bold_white"
    box_bottom

    echo ""

    read -rsp "Masukkan Token Bot Telegram : " bot_token_input
    echo ""
    read -rp "Masukkan Chat ID Telegram   : " chat_id_input

    if [ -z "$bot_token_input" ] ||
       [ -z "$chat_id_input" ]; then

        echo -e "${red}Token bot dan Chat ID tidak boleh kosong.${reset}"
        pause_menu
        return
    fi

    if ! [[ "$bot_token_input" =~ ^[0-9]+:[A-Za-z0-9_-]+$ ]]; then
        echo -e "${red}Format token bot tidak valid.${reset}"
        pause_menu
        return
    fi

    if ! [[ "$chat_id_input" =~ ^-?[0-9]+$ ]]; then
        echo -e "${red}Format Chat ID tidak valid.${reset}"
        pause_menu
        return
    fi

    cat >/root/.vars <<EOF
bot_token="${bot_token_input}"
telegram_id="${chat_id_input}"
EOF

    chmod 600 /root/.vars

    systemctl restart limitip >/dev/null 2>&1 || true
    systemctl restart limitipssh >/dev/null 2>&1 || true

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "BOT TELEGRAM BERHASIL DISIMPAN" "$bold_white"
    box_middle
    box_left "Konfigurasi : /root/.vars" "$white"
    box_left "Permission  : 600" "$white"
    box_bottom

    pause_menu
}

setting_reboot_jam_reboot() {
    local reboot_hour

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "PENGATURAN AUTO REBOOT" "$bold_white"
    box_bottom

    echo ""

    read -rp "Masukkan jam reboot [00-23] : " reboot_hour

    if ! [[ "$reboot_hour" =~ ^([01][0-9]|2[0-3])$ ]]; then
        echo -e "${red}Jam tidak valid. Gunakan format 00 sampai 23.${reset}"
        pause_menu
        return
    fi

    cat >/etc/cron.d/daily_reboot <<EOF
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 ${reboot_hour} * * * root /sbin/reboot
EOF

    chmod 644 /etc/cron.d/daily_reboot

    systemctl restart cron >/dev/null 2>&1 || true

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "AUTO REBOOT BERHASIL DIATUR" "$bold_white"
    box_middle
    box_left "Reboot Otomatis : ${reboot_hour}:00 WIB" "$green"
    box_bottom

    pause_menu
}

change_banner() {
    if ! command -v nano >/dev/null 2>&1; then
        clear

        box_top
        box_center "$BRAND" "$green"
        box_center "UBAH BANNER SERVER" "$bold_white"
        box_middle
        box_center "NANO TIDAK DITEMUKAN" "$red"
        box_middle
        box_left "Install nano terlebih dahulu." "$yellow"
        box_bottom

        pause_menu
        return
    fi

    touch /etc/issue.net

    nano /etc/issue.net
}

server_load() {
    if command -v gotop >/dev/null 2>&1; then
        gotop
        return
    fi

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "MONITOR SERVER" "$bold_white"
    box_middle
    box_center "GOTOP TIDAK DITEMUKAN" "$red"
    box_middle
    box_left "Perintah gotop belum terpasang." "$yellow"
    box_bottom

    pause_menu
}

backup_restore_menu() {
    if ! command -v backuprestore >/dev/null 2>&1; then
        clear

        box_top
        box_center "$BRAND" "$green"
        box_center "BACKUP / RESTORE" "$bold_white"
        box_middle
        box_center "BACKUPRESTORE TIDAK DITEMUKAN" "$red"
        box_bottom

        pause_menu
        return
    fi

    backuprestore server
}

reboot_server() {
    local confirm

    clear

    box_top
    box_center "$BRAND" "$green"
    box_center "REBOOT SERVER" "$bold_white"
    box_middle
    box_center "PERINGATAN" "$red"
    box_left "Semua koneksi pengguna akan terputus." "$yellow"
    box_bottom

    echo ""

    read -rp "Yakin ingin reboot server sekarang? [y/N] : " confirm

    case "$confirm" in
        y|Y|yes|YES|ya|YA|Ya)
            clear
            echo -e "${yellow}Server sedang direboot...${reset}"
            sleep 1
            /sbin/reboot
            ;;
        *)
            echo -e "${yellow}Reboot dibatalkan.${reset}"
            sleep 1
            ;;
    esac
}

display_setting_menu() {
    local menu

    while true; do
        show_header

        echo ""

        box_top
        box_center "MENU PENGATURAN" "$bold_white"
        box_middle
        box_left "1. Setup Bot Telegram" "$green"
        box_left "2. Cek Status Layanan" "$green"
        box_left "3. Cek Penggunaan Bandwidth" "$green"
        box_left "4. Pengaturan Auto Backup" "$green"
        box_left "5. Backup / Restore Server" "$green"
        box_left "6. Informasi Port" "$green"
        box_left "7. Restart Semua Layanan" "$green"
        box_left "8. Ubah Domain Server" "$green"
        box_left "9. Ubah Nameserver" "$green"
        box_left "10. Ubah Banner Server" "$green"
        box_left "11. Monitor Load Server" "$green"
        box_left "12. Pengaturan Auto Reboot" "$green"
        box_left "13. Reboot Server" "$red"
        box_left "X. Keluar" "$white"
        box_bottom

        echo ""

        read -rp "Pilih menu [1-13/X] : " menu

        case "$menu" in
            1)
                setup_bot_telegram
                ;;
            2)
                running
                ;;
            3)
                check_bw
                ;;
            4)
                auto_backup
                ;;
            5)
                backup_restore_menu
                ;;
            6)
                info_port
                ;;
            7)
                restart_services
                ;;
            8)
                change_domain
                ;;
            9)
                change_ns
                ;;
            10)
                change_banner
                ;;
            11)
                server_load
                ;;
            12)
                setting_reboot_jam_reboot
                ;;
            13)
                reboot_server
                ;;
            x|X)
                clear

                box_top
                box_center "$BRAND" "$green"
                box_center "KELUAR DARI PENGATURAN" "$bold_white"
                box_middle
                box_center "Terima kasih telah menggunakan layanan kami." "$white"
                box_middle
                box_left "WhatsApp ~ $WHATSAPP" "$green"
                box_left "Telegram ~ $TELEGRAM" "$cyan"
                box_bottom

                exit 0
                ;;
            *)
                echo ""
                echo -e "${red}Pilihan tidak valid. Silakan coba kembali.${reset}"
                sleep 1
                ;;
        esac
    done
}

vps_ip=$(wget -qO- ipv4.icanhazip.com)

if [ -z "$vps_ip" ]; then
    vps_ip=$(curl -4 -s ipv4.icanhazip.com)
fi

if [ -z "$vps_ip" ]; then
    vps_ip="Tidak diketahui"
fi

data_acc=$(
    curl -s "${BASE_URL}/access" |
        grep "### $vps_ip " |
        awk '{print $3}'
)

if [ -z "$data_acc" ]; then
    show_access_denied "VPS belum memiliki izin akses script."
fi

expiry_date=$(date -d "$data_acc" +%s 2>/dev/null)
current_date=$(date +%s)

if [ -z "$expiry_date" ]; then
    show_access_denied "Data masa aktif script tidak valid."
fi

if [ "$expiry_date" -le "$current_date" ]; then
    show_access_denied "Masa aktif akses script telah berakhir."
fi

remaining_days=$(((expiry_date - current_date) / 86400))

display_setting_menu