#!/bin/bash

# ============================================================
#   CyberPanel Auto Setup Script v3.0
#   OS    : Ubuntu 20.04, 22.04 / AlmaLinux 8/9
#   Author: IKYY x CLAUDE
#   Version: 3.0 (Password + Provider Detection)
# ============================================================

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
WHITE='\033[1;37m'
NC='\033[0m'

log_info()    { echo -e "${CYAN}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[OK]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error()   { echo -e "${RED}[ERROR]${NC} $1"; }
log_step()    { echo ""; echo -e "${WHITE}========================================${NC}"; echo -e "${WHITE} $1${NC}"; echo -e "${WHITE}========================================${NC}"; }

if [[ $EUID -ne 0 ]]; then
  log_error "Harus Run as Administrator!"; exit 1
fi

# Auto-detect OS
if grep -qi "ubuntu 22.04" /etc/os-release; then
  OS="ubuntu"; OS_NAME="Ubuntu 22.04"; PKG="apt"
elif grep -qi "ubuntu 20.04" /etc/os-release; then
  OS="ubuntu"; OS_NAME="Ubuntu 20.04"; PKG="apt"
elif grep -qi "almalinux 9" /etc/os-release; then
  OS="almalinux"; OS_NAME="AlmaLinux 9"; PKG="dnf"
elif grep -qi "almalinux 8" /etc/os-release; then
  OS="almalinux"; OS_NAME="AlmaLinux 8"; PKG="dnf"
else
  log_error "OS tidak didukung CyberPanel!"
  log_error "Support: Ubuntu 20.04, 22.04, AlmaLinux 8/9"
  exit 1
fi

clear
echo -e "${CYAN}"
cat << "EOF"
  ██╗██╗  ██╗██╗   ██╗██╗   ██╗    ██╗  ██╗
  ██║██║ ██╔╝╚██╗ ██╔╝╚██╗ ██╔╝    ╚██╗██╔╝
  ██║█████╔╝  ╚████╔╝  ╚████╔╝      ╚███╔╝ 
  ██║██╔═██╗   ╚██╔╝    ╚██╔╝       ██╔██╗ 
  ██║██║  ██╗   ██║      ██║       ██╔╝ ██╗
  ╚═╝╚═╝  ╚═╝   ╚═╝      ╚═╝       ╚═╝  ╚═╝
EOF
echo -e "${NC}"
echo -e "${WHITE}  CyberPanel Auto Setup v3.0 | by IKYY x CLAUDE${NC}"
echo -e "${CYAN}  OS Terdeteksi: ${OS_NAME}${NC}"
echo ""

# ============================================================
# INPUT KONFIGURASI
# ============================================================
echo -e "${CYAN}[ KONFIGURASI ]${NC}"
echo ""

# Password CyberPanel
while [[ -z "$CP_PASSWORD" ]]; do
  read -s -p "  Masukkan password admin CyberPanel    : " CP_PASSWORD
  echo ""
  if [[ ${#CP_PASSWORD} -lt 6 ]]; then
    echo -e "  ${RED}Password minimal 6 karakter!${NC}"
    CP_PASSWORD=""
  fi
done

# Port CyberPanel
echo ""
echo -e "  ${YELLOW}Mau ubah port CyberPanel dari default 8090?${NC}"
echo -e "  ${YELLOW}1${NC}) Ubah port panel"
echo -e "  ${YELLOW}2${NC}) Skip — tetap port 8090"
while true; do
  read -p "  Pilih (1/2, default: 2): " CP_PORT_CHOICE
  CP_PORT_CHOICE=${CP_PORT_CHOICE:-2}
  if [[ "$CP_PORT_CHOICE" =~ ^[1-2]$ ]]; then break; fi
  echo -e "  ${RED}Pilihan tidak valid!${NC}"
done

CP_PORT=8090
CHANGE_CP_PORT=false
if [[ "$CP_PORT_CHOICE" == "1" ]]; then
  while true; do
    read -p "  Masukkan port CyberPanel baru (1024-65535): " CP_PORT_INPUT
    if [[ "$CP_PORT_INPUT" =~ ^[0-9]+$ ]] && [ "$CP_PORT_INPUT" -ge 1024 ] && [ "$CP_PORT_INPUT" -le 65535 ]; then
      CP_PORT=$CP_PORT_INPUT
      CHANGE_CP_PORT=true
      break
    fi
    echo -e "  ${RED}Port tidak valid!${NC}"
  done
fi

# SSH Port
while true; do
  read -p "  SSH Port baru (default: 22)            : " SSH_PORT
  SSH_PORT=${SSH_PORT:-22}
  if [[ "$SSH_PORT" =~ ^[0-9]+$ ]] && [ "$SSH_PORT" -ge 1 ] && [ "$SSH_PORT" -le 65535 ]; then break; fi
  echo -e "  ${RED}Port tidak valid!${NC}"
done

# ============================================================
# DETEKSI PROVIDER VPS
# ============================================================
echo ""
log_info "Mendeteksi provider VPS..."

PROVIDER="lokal"
PROVIDER_NAME="VPS Lokal"

# Deteksi DigitalOcean
if curl -s --max-time 3 http://169.254.169.254/metadata/v1/vendor-data 2>/dev/null | grep -qi "digitalocean"; then
  PROVIDER="do"
  PROVIDER_NAME="DigitalOcean"
# Deteksi Vultr
elif curl -s --max-time 3 http://169.254.169.254/v1.json 2>/dev/null | grep -qi "vultr"; then
  PROVIDER="vultr"
  PROVIDER_NAME="Vultr"
# Deteksi Linode
elif curl -s --max-time 3 http://169.254.169.254/ 2>/dev/null | grep -qi "linode"; then
  PROVIDER="linode"
  PROVIDER_NAME="Linode/Akamai"
fi

echo ""
if [[ "$PROVIDER" == "lokal" ]]; then
  echo -e "  ${GREEN}✅ ${PROVIDER_NAME} terdeteksi — aman ganti port langsung!${NC}"
  CHANGE_PORT=true
else
  echo -e "  ${YELLOW}⚠ ${PROVIDER_NAME} terdeteksi!${NC}"
  echo -e "  ${YELLOW}  Provider ini punya network-level firewall di dashboard.${NC}"
  echo ""
  echo -e "  Pilih:"
  echo -e "  ${YELLOW}1${NC}) Ganti port SSH (minta owner buka port ${SSH_PORT} di dashboard dulu)"
  echo -e "  ${YELLOW}2${NC}) Skip — tetap pakai port ${SSH_PORT} yang ada sekarang"
  echo ""
  while true; do
    read -p "  Pilih (1/2): " FW_CHOICE
    if [[ "$FW_CHOICE" == "1" || "$FW_CHOICE" == "2" ]]; then break; fi
    echo -e "  ${RED}Pilihan tidak valid!${NC}"
  done

  if [[ "$FW_CHOICE" == "1" ]]; then
    CHANGE_PORT=true
    echo ""
    echo -e "  ${YELLOW}⚠ Sekarang minta owner buka port ${SSH_PORT} di dashboard ${PROVIDER_NAME}!${NC}"
    echo -e "  ${YELLOW}  Atau buka 1 sesi SSH backup di JuiceSSH (port lama) sebagai jaga-jaga.${NC}"
    echo ""
    read -p "  Sudah siap? Tekan Enter untuk lanjut..."
  else
    CHANGE_PORT=false
    echo -e "  ${CYAN}  Port SSH tidak diubah.${NC}"
  fi
fi

echo ""
read -p "  Lanjutkan install CyberPanel? (y/n): " CONFIRM
if [[ "$CONFIRM" != "y" && "$CONFIRM" != "Y" ]]; then
  echo -e "${RED}  Dibatalkan.${NC}"; exit 0
fi

# ============================================================
# STEP 1: UPDATE
# ============================================================
log_step "STEP 1: Update & Upgrade System"
if [[ "$OS" == "ubuntu" ]]; then
  apt update -y -qq
  DEBIAN_FRONTEND=noninteractive apt upgrade -y -qq
  apt install -y -qq curl wget git unzip ufw
else
  dnf update -y -q
  dnf install -y -q curl wget git unzip firewalld
fi
log_success "Sistem up-to-date!"

# ============================================================
# STEP 2: TIMEZONE
# ============================================================
log_step "STEP 2: Set Timezone WIB"
timedatectl set-timezone Asia/Jakarta
log_success "Timezone: $(timedatectl | grep 'Time zone')"

# ============================================================
# STEP 3: SWAP
# ============================================================
log_step "STEP 3: Setup Swap 2GB"
if [[ $(swapon --show | wc -l) -gt 0 ]]; then
  EXISTING_SWAP=$(swapon --show --noheadings | awk '{print $1, $3}' | head -1)
  log_warning "Swap sudah ada (${EXISTING_SWAP}), skip"
else
  fallocate -l 2G /swapfile
  chmod 600 /swapfile
  mkswap /swapfile
  swapon /swapfile
  echo '/swapfile none swap sw 0 0' >> /etc/fstab
  log_success "Swap 2GB aktif"
fi

# ============================================================
# STEP 4: FIREWALL
# ============================================================
log_step "STEP 4: Konfigurasi Firewall"

if [[ "$OS" == "ubuntu" ]]; then
  if [[ "$CHANGE_PORT" == true ]]; then
    ufw allow ${SSH_PORT}/tcp
  else
    ufw allow 22/tcp
  fi
  ufw allow 80/tcp
  ufw allow 443/tcp
  ufw allow 8090/tcp
  [[ "$CHANGE_CP_PORT" == true ]] && ufw allow ${CP_PORT}/tcp
  ufw allow 8443/tcp
  ufw allow 21/tcp
  ufw allow 40110:40210/tcp
  ufw --force enable
  log_success "UFW dikonfigurasi!"
else
  systemctl enable firewalld --now
  if [[ "$CHANGE_PORT" == true ]]; then
    firewall-cmd --permanent --add-port=${SSH_PORT}/tcp
  else
    firewall-cmd --permanent --add-port=22/tcp
  fi
  firewall-cmd --permanent --add-port=80/tcp
  firewall-cmd --permanent --add-port=443/tcp
  firewall-cmd --permanent --add-port=8090/tcp
  [[ "$CHANGE_CP_PORT" == true ]] && firewall-cmd --permanent --add-port=${CP_PORT}/tcp
  firewall-cmd --permanent --add-port=8443/tcp
  firewall-cmd --permanent --add-port=21/tcp
  firewall-cmd --permanent --add-port=40110-40210/tcp
  firewall-cmd --reload
  log_success "Firewalld dikonfigurasi!"
fi

# ============================================================
# STEP 5: GANTI PORT SSH (kalau dipilih)
# ============================================================
if [[ "$CHANGE_PORT" == true && "$SSH_PORT" != "22" ]]; then
  log_step "STEP 5: Ganti Port SSH ke ${SSH_PORT}"
  SSH_CONFIG="/etc/ssh/sshd_config"
  cp $SSH_CONFIG ${SSH_CONFIG}.bak.$(date +%Y%m%d)
  sed -i '/^#\?Port /d' $SSH_CONFIG
  echo "Port $SSH_PORT" >> $SSH_CONFIG

  SSHD_BIN=$(which sshd 2>/dev/null || echo "/usr/sbin/sshd")
  if $SSHD_BIN -t 2>/dev/null; then
    if systemctl restart sshd 2>/dev/null || service ssh restart 2>/dev/null; then
      log_success "SSH pindah ke port ${SSH_PORT}"
      # Tutup port 22 lama setelah SSH berhasil pindah
      if [[ "$OS" == "ubuntu" ]]; then
        ufw delete allow 22/tcp 2>/dev/null || true
      else
        firewall-cmd --permanent --remove-port=22/tcp 2>/dev/null || true
        firewall-cmd --reload 2>/dev/null || true
      fi
      log_success "Port 22 lama ditutup"
    else
      log_warning "SSH gagal restart — rollback ke port 22"
      cp ${SSH_CONFIG}.bak.$(date +%Y%m%d) $SSH_CONFIG
      systemctl restart sshd 2>/dev/null || service ssh restart 2>/dev/null
    fi
  else
    log_warning "SSH config tidak valid — rollback"
    cp ${SSH_CONFIG}.bak.$(date +%Y%m%d) $SSH_CONFIG
  fi
else
  log_step "STEP 5: Port SSH"
  log_info "Port SSH tidak diubah"
fi

# ============================================================
# STEP 6: INSTALL CYBERPANEL
# ============================================================
log_step "STEP 6: Install CyberPanel (OpenLiteSpeed)"

INSTALLER="/tmp/cyberpanel_install.sh"
log_info "Mendownload installer..."
if curl --max-time 120 -s -o "$INSTALLER" https://cyberpanel.net/install.sh && [[ -s "$INSTALLER" ]]; then
  log_success "Installer berhasil didownload"
elif wget --timeout=120 -q -O "$INSTALLER" https://cyberpanel.net/install.sh && [[ -s "$INSTALLER" ]]; then
  log_success "Installer berhasil didownload via wget"
else
  log_error "Gagal download installer! Cek koneksi internet."
  exit 1
fi

log_info "Menjalankan installer CyberPanel (non-interactive)..."

# Jawaban otomatis ke installer:
# 1 = Install CyberPanel
# 1 = OpenLiteSpeed
# y = Full service
# y = Memcached
# y = Redis
# n = Remote MySQL
# CP_PASSWORD = password admin
printf '1\n1\ny\ny\ny\nn\n%s\n' "${CP_PASSWORD}" | bash "$INSTALLER"
INSTALL_EXIT=$?

rm -f "$INSTALLER"

if [[ $INSTALL_EXIT -ne 0 ]]; then
  log_error "Instalasi CyberPanel gagal (exit: ${INSTALL_EXIT})"
  log_error "Cek log: /var/log/cyberpanel-install.log"
  exit 1
fi

log_success "CyberPanel berhasil diinstall!"

# ============================================================
# STEP 7: SET PASSWORD VIA DJANGO BCRYPT
# ============================================================
log_step "STEP 7: Set Password Admin CyberPanel"

PYTHON_BIN="/usr/local/CyberCP/bin/python"
MANAGE_PY="/usr/local/CyberCP/manage.py"

# Tunggu CyberPanel benar-benar siap (max 3 menit)
log_info "Menunggu CyberPanel siap..."
CP_READY=false
for i in $(seq 1 18); do
  if [[ -f "$PYTHON_BIN" && -f "$MANAGE_PY" ]] && systemctl is-active --quiet lscpd; then
    CP_READY=true
    log_success "CyberPanel siap setelah $((i * 10)) detik!"
    break
  fi
  echo -ne "  Menunggu... ${i}0 detik\r"
  sleep 10
done

if [[ "$CP_READY" == false ]]; then
  log_warning "CyberPanel belum fully ready, coba set password tetap..."
fi

# Escape password untuk keamanan (simpan ke file sementara)
PASS_FILE=$(mktemp /tmp/.cp_pass_XXXXXX)
chmod 600 "$PASS_FILE"
printf '%s' "${CP_PASSWORD}" > "$PASS_FILE"

PASSWORD_SET=false

# Metode 1: adminPass command (paling reliable)
if command -v adminPass &>/dev/null; then
  log_info "Set password via adminPass..."
  if adminPass "${CP_PASSWORD}" &>/dev/null; then
    log_success "Password berhasil diset via adminPass!"
    PASSWORD_SET=true
  fi
fi

# Metode 2: Django via manage.py shell -c (fallback)
if [[ "$PASSWORD_SET" == false && -f "$PYTHON_BIN" && -f "$MANAGE_PY" ]]; then
  log_info "Set password via Django manage.py shell..."
  $PYTHON_BIN -m pip install bcrypt --quiet 2>/dev/null

  # Baca password dari file temp
  CP_PASS_ESC=$(cat "$PASS_FILE" | python3 -c "import sys,json; print(json.dumps(sys.stdin.read()))" 2>/dev/null | tr -d '"')

  RESULT=$($PYTHON_BIN $MANAGE_PY shell -c "
import bcrypt
from loginSystem.models import Administrator
try:
    with open('$PASS_FILE', 'rb') as f:
        pwd = f.read()
    u = Administrator.objects.get(userName='admin')
    hashed = bcrypt.hashpw(pwd, bcrypt.gensalt()).decode('utf-8')
    u.password = hashed
    u.save()
    print('SUCCESS')
except Exception as e:
    print('ERROR: ' + str(e))
" 2>/dev/null)

  if [[ "$RESULT" == *"SUCCESS"* ]]; then
    log_success "Password berhasil diset via Django!"
    PASSWORD_SET=true
  else
    log_warning "Django method gagal: $RESULT"
  fi
fi

# Hapus file password sementara
rm -f "$PASS_FILE"

if [[ "$PASSWORD_SET" == false ]]; then
  log_warning "Semua metode otomatis gagal!"
  log_warning "Set password manual setelah install dengan command:"
  log_warning "  adminPass 'PASSWORD_LO'"
  log_warning "atau:"
  log_warning "  /usr/local/CyberCP/bin/python /usr/local/CyberCP/manage.py changeAdminPass"
fi

# Tutup port MySQL dari publik
if [[ "$OS" == "ubuntu" ]]; then
  ufw delete allow 3306/tcp 2>/dev/null || true
else
  firewall-cmd --permanent --remove-port=3306/tcp 2>/dev/null || true
  firewall-cmd --reload 2>/dev/null || true
fi

# ============================================================
# STEP 8: GANTI PORT CYBERPANEL (kalau dipilih)
# ============================================================
if [[ "$CHANGE_CP_PORT" == true ]]; then
  log_step "STEP 8: Ganti Port CyberPanel ke ${CP_PORT}"

  # Deteksi provider untuk warning
  if [[ "$PROVIDER" != "lokal" ]]; then
    echo ""
    echo -e "  ${YELLOW}⚠ ${PROVIDER_NAME} terdeteksi!${NC}"
    echo -e "  ${YELLOW}  Pastikan port ${CP_PORT} sudah dibuka di dashboard ${PROVIDER_NAME}!${NC}"
    echo ""
    read -p "  Sudah dibuka? Tekan Enter untuk lanjut..."
  fi

  SETTINGS_FILE="/usr/local/CyberCP/CyberCP/settings.py"
  if [[ -f "$SETTINGS_FILE" ]]; then
    # Backup settings
    cp $SETTINGS_FILE ${SETTINGS_FILE}.bak.$(date +%Y%m%d)

    # Ganti port di settings.py
    sed -i "s/SERVERPORT\s*=\s*[0-9]*/SERVERPORT = ${CP_PORT}/" $SETTINGS_FILE
    sed -i "s/SERVER_PORT\s*=\s*[0-9]*/SERVER_PORT = ${CP_PORT}/" $SETTINGS_FILE

    # Restart CyberPanel
    systemctl restart lscpd 2>/dev/null
    sleep 5

    # Cek port baru aktif
    if ss -tlnp 2>/dev/null | grep -q ":${CP_PORT}"; then
      # Tutup port 8090 lama
      if [[ "$OS" == "ubuntu" ]]; then
        ufw delete allow 8090/tcp 2>/dev/null || true
      else
        firewall-cmd --permanent --remove-port=8090/tcp 2>/dev/null || true
        firewall-cmd --reload 2>/dev/null || true
      fi
      log_success "Port CyberPanel berhasil diubah ke ${CP_PORT}"
      log_success "Port 8090 lama ditutup"
    else
      log_warning "Port ${CP_PORT} belum aktif — rollback ke 8090"
      cp ${SETTINGS_FILE}.bak.$(date +%Y%m%d) $SETTINGS_FILE
      systemctl restart lscpd 2>/dev/null
      CP_PORT=8090
      CHANGE_CP_PORT=false
    fi
  else
    log_warning "settings.py tidak ditemukan — port tidak diubah"
    CP_PORT=8090
    CHANGE_CP_PORT=false
  fi
else
  log_step "STEP 8: Port CyberPanel"
  log_info "Port CyberPanel tidak diubah — tetap 8090"
fi

# ============================================================
# STEP 9: LARAVEL ENVIRONMENT
# ============================================================
log_step "STEP 9: Install Laravel Environment"

# Install Composer
log_info "Install Composer..."
if ! command -v composer &>/dev/null; then
  curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
  php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer &>/dev/null
  rm -f /tmp/composer-setup.php
  if command -v composer &>/dev/null; then
    log_success "Composer terinstall: $(composer --version 2>/dev/null | head -1)"
  else
    log_warning "Composer gagal install — install manual: https://getcomposer.org"
  fi
else
  log_success "Composer sudah ada: $(composer --version 2>/dev/null | head -1)"
fi

# Install Node.js 20 LTS
log_info "Install Node.js 20 LTS..."
if ! command -v node &>/dev/null; then
  if [[ "$OS" == "ubuntu" ]]; then
    curl -fsSL https://deb.nodesource.com/setup_20.x | bash - &>/dev/null
    DEBIAN_FRONTEND=noninteractive apt install -y -qq nodejs
  else
    curl -fsSL https://rpm.nodesource.com/setup_20.x | bash - &>/dev/null
    dnf install -y -q nodejs
  fi
  if command -v node &>/dev/null; then
    log_success "Node.js terinstall: $(node --version)"
    log_success "npm terinstall: $(npm --version)"
  else
    log_warning "Node.js gagal install"
  fi
else
  log_success "Node.js sudah ada: $(node --version)"
fi

# Install Laravel Installer & Vite global
log_info "Install Laravel Installer & Vite..."
if command -v composer &>/dev/null; then
  composer global require laravel/installer &>/dev/null && \
    log_success "Laravel Installer terinstall" || \
    log_warning "Laravel Installer gagal install"
fi

if command -v npm &>/dev/null; then
  npm install -g vite &>/dev/null && \
    log_success "Vite terinstall" || \
    log_warning "Vite gagal install"
fi

# Tambah alias di .bashrc
log_info "Setup alias..."
BASHRC="/root/.bashrc"
grep -q "composer global" $BASHRC 2>/dev/null || cat >> $BASHRC <<'EOF'

# Laravel Environment — IKYY x CLAUDE
export PATH="$PATH:$HOME/.config/composer/vendor/bin"
alias art="php artisan"
alias sail="./vendor/bin/sail"
EOF
log_success "Alias ditambahkan (art, sail)"

# Info cara pakai
echo ""
echo -e "  ${CYAN}📋 Cara deploy Laravel di CyberPanel:${NC}"
echo -e "  1. Buat website di CyberPanel"
echo -e "  2. Upload folder Laravel ke /home/domain/public_html"
echo -e "  3. Set document root ke ${YELLOW}/public${NC} di CyberPanel"
echo -e "  4. Masuk ke folder project:"
echo -e "     ${YELLOW}cd /home/domain/public_html${NC}"
echo -e "  5. Jalankan:"
echo -e "     ${YELLOW}cp .env.example .env${NC}"
echo -e "     ${YELLOW}composer install${NC}"
echo -e "     ${YELLOW}php artisan key:generate${NC}"
echo -e "     ${YELLOW}php artisan migrate${NC}"
echo -e "     ${YELLOW}php artisan storage:link${NC}"
echo -e "     ${YELLOW}chmod -R 775 storage bootstrap/cache${NC}"
echo ""

# ============================================================
# STEP 10: HEALTH CHECK
# ============================================================
log_step "STEP 10: Health Check"

log_info "Mengecek service..."
sleep 10

systemctl is-active --quiet lscpd    && log_success "CyberPanel (lscpd) berjalan"  || log_warning "lscpd belum aktif"
systemctl is-active --quiet lsws     && log_success "OpenLiteSpeed berjalan"        || log_warning "lsws belum aktif"
systemctl is-active --quiet redis-server && log_success "Redis berjalan"            || log_warning "Redis belum aktif"

ss -tlnp 2>/dev/null | grep -q ":${CP_PORT}" && log_success "Port ${CP_PORT} aktif — CyberPanel siap" || log_warning "Port ${CP_PORT} belum listen"

# ============================================================
# RINGKASAN
# ============================================================
SERVER_IP=$(curl -s --max-time 5 -4 ifconfig.me 2>/dev/null || \
            curl -s --max-time 5 -4 icanhazip.com 2>/dev/null || \
            hostname -I | awk '{for(i=1;i<=NF;i++) if($i !~ /:/) {print $i; exit}}')

echo ""
echo -e "${GREEN}╔══════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║    CYBERPANEL BERHASIL DIINSTALL! 🎉          ║${NC}"
echo -e "${GREEN}╠══════════════════════════════════════════════╣${NC}"
echo -e "${GREEN}║${NC}  OS          : ${CYAN}${OS_NAME}${NC}"
echo -e "${GREEN}║${NC}  Provider    : ${CYAN}${PROVIDER_NAME}${NC}"
echo -e "${GREEN}║${NC}  Dashboard   : ${CYAN}https://${SERVER_IP}:${CP_PORT}${NC}"
echo -e "${GREEN}║${NC}  Username    : ${WHITE}admin${NC}"
echo -e "${GREEN}║${NC}  Password    : ${YELLOW}${CP_PASSWORD}${NC}"
if [[ "$CHANGE_CP_PORT" == true ]]; then
  echo -e "${GREEN}║${NC}  Panel Port  : ${WHITE}${CP_PORT} (diubah dari 8090)${NC}"
else
  echo -e "${GREEN}║${NC}  Panel Port  : ${WHITE}8090 (default)${NC}"
fi
if [[ "$CHANGE_PORT" == true ]]; then
  echo -e "${GREEN}║${NC}  SSH Port    : ${WHITE}${SSH_PORT}${NC}"
else
  echo -e "${GREEN}║${NC}  SSH Port    : ${WHITE}22 (tidak diubah)${NC}"
fi
echo -e "${GREEN}╠══════════════════════════════════════════════╣${NC}"
echo -e "${GREEN}║${NC}  ${YELLOW}⚠ Kalau browser SSL warning → klik Advanced${NC}"
echo -e "${GREEN}║${NC}  ${YELLOW}  lalu Proceed — normal untuk self-signed SSL${NC}"
echo -e "${GREEN}╠══════════════════════════════════════════════╣${NC}"
echo -e "${GREEN}║${NC}  Laravel Environment:"
command -v composer &>/dev/null && \
  echo -e "${GREEN}║${NC}  Composer  : ${GREEN}✅ Terinstall${NC}" || \
  echo -e "${GREEN}║${NC}  Composer  : ${RED}❌ Gagal${NC}"
command -v node &>/dev/null && \
  echo -e "${GREEN}║${NC}  Node.js   : ${GREEN}✅ $(node --version)${NC}" || \
  echo -e "${GREEN}║${NC}  Node.js   : ${RED}❌ Gagal${NC}"
echo -e "${GREEN}║${NC}  Alias     : ${GREEN}art${NC} = php artisan"
echo -e "${GREEN}╚══════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${YELLOW}  Alhamdulillah, setup selesai! 🚀🤲${NC}"
echo ""
