#!/bin/bash
# ==========================================
# Script Instalasi Server Ubuntu 24.04 Lts
# Tujuan: Next.js AGC + Apache Reverse Proxy + SSL Let's Encrypt
# ==========================================

# 1. Update OS Secara Menyeluruh
echo "[1/6] Memperbarui Repositori Ubuntu 24.04..."
sudo apt update && sudo apt upgrade -y

# 2. Install Apache2 dan Mengaktifkan Fitur Proxy Node.js
echo "[2/6] Menginstal Apache2 & Modul Layer Proxy..."
sudo apt install apache2 -y
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod headers
sudo a2enmod ssl
sudo systemctl restart apache2

# 3. Install Node.js v20 (LTS Terbaik Untuk Next.js 14/15)
echo "[3/6] Menginstal Node.js 20 LTS..."
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# 4. Install PM2 (Agar Next.js Menyala Non-Stop di Latar Belakang)
echo "[4/6] Menginstal PM2 Process Manager..."
sudo npm install -g pm2

# 5. Install Certbot (Mesin Otomatis Pencetak SSL Gratis)
echo "[5/6] Menginstal Certbot & Plugin Apache..."
sudo apt install certbot python3-certbot-apache -y

# 6. Setup Default VirtualHost Apache (Catch-All Port 80)
# Ini adalah "Sihir" yang akan menangkap RIBUAN DOMAIN APA SAJA yang IP-nya mengarah ke server ini
echo "[6/6] Menyiapkan Virtual Host Apache..."
sudo bash -c 'cat > /etc/apache2/sites-available/000-default.conf <<EOF
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    
    # Kunci Layer Domain: Menangkap semua domain
    ServerAlias *

    # Melempar Traffik ke mesin Next.js (Port 3000)
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/
    
    ErrorLog \${APACHE_LOG_DIR}/error.log
    CustomLog \${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
EOF'

# Reload Apache agar setingan aktif
sudo systemctl reload apache2

echo "=========================================="
echo "🎯 INSTALASI SERVER SELESAI!"
echo "Node.js: $(node -v)"
echo "NPM: $(npm -v)"
echo "PM2: $(pm2 -v)"
echo "=========================================="
echo ""
echo "🚀 CARA MENYALAKAN ENGINE NEXT.JS ANDA:"
echo "1. Upload folder source code AGC Anda ke server (misal ke /var/www/html)"
echo "2. Masuk ke folder tersebut: cd /var/www/html"
echo "3. Install module: npm install"
echo "4. Build engine (wajib 1x sebelum tayang): npm run build"
echo "5. Fix permission: chmod +x node_modules/.bin/next"
echo "6. Nyalakan dengan PM2: pm2 start npm --name \"agc-core\" -- start"
echo "7. Simpan state PM2: pm2 save"
echo "8. Auto-start saat reboot: pm2 startup"
echo ""
echo "🔒 CARA PASANG SSL (HTTPS) SETIAP KALI ADA DOMAIN BARU YANG DIMASUKKAN:"
echo "VPS Apache wajib di-inject SSL-nya satu per satu untuk setiap domain."
echo "Begitu Anda meng-arahkan A Record 'domainAnda.com' ke IP server ini, jalankan perintah ini:"
echo ""
echo "sudo certbot --apache -d domainAnda.com -d www.domainAnda.com"
echo ""
echo "Selesai! Web Anda langsung memilki Gembok Hijau (HTTPS)."
echo "=========================================="
