#!/bin/bash
set -e

echo ""
echo "============================================================"
echo "   🚀 CHR 7.19.6 Auto Installer Khusus VPS Leaseweb"
echo "============================================================"
echo " 📦 Dibuat oleh: Flazz Networks"
echo " 🌐 Website: https://www.flazznetworks.com/"
echo ""
echo "🛠️  Script ini akan menginstall MikroTik RouterOS CHR 7.19.6"
echo "     secara otomatis ke disk utama VPS Leaseweb kamu."
echo ""
echo "⚠️  Seluruh isi disk akan diformat total saat proses berjalan!"
echo "⚠️  Pastikan VPS ini memang disiapkan untuk instalasi baru."
echo ""
echo "✅ Fitur otomatis:"
echo "   - Download & ekstrak image CHR"
echo "   - Mount image & inject IP publik VPS"
echo "   - Flash langsung ke disk utama (/dev/sdX)"
echo ""
read -rp "➡️  Lanjutkan proses install ke VPS Leaseweb ini? (Y/N): " proceed
if [[ ! "$proceed" =~ ^[Yy]$ ]]; then
    echo "❎  Proses dibatalkan oleh pengguna."
    exit 1
fi
echo ""

# ===[ VARIABEL ]===
CHR_URL="https://download.mikrotik.com/routeros/7.19.6/chr-7.19.6.img.zip"
CHR_ZIP="chr.img.zip"
CHR_IMG="chr.img"

echo "[1/7] 🚀 Menyiapkan dependensi (kpartx)..."
if ! command -v kpartx &>/dev/null; then
    echo "→ kpartx belum terpasang. Menginstall..."
    apt update && apt install -y kpartx
else
    echo "✓ kpartx sudah terpasang"
fi

echo "[2/7] ⬇️ Download & ekstrak CHR image..."
wget -q --show-progress "$CHR_URL" -O "$CHR_ZIP"
gunzip -c "$CHR_ZIP" > "$CHR_IMG"

echo "[3/7] 🔍 Mendeteksi dan mount image CHR..."
LOOP_OUTPUT=$(kpartx -av "$CHR_IMG" 2>/dev/null || true)
LOOPDEV=$(echo "$LOOP_OUTPUT" | grep -oE 'loop[0-9]+' | head -n1)

if [ -n "$LOOPDEV" ] && [ -e "/dev/mapper/${LOOPDEV}p2" ]; then
    TARGET_DEV="/dev/mapper/${LOOPDEV}p2"
elif losetup -fP "$CHR_IMG"; LOOPDEV=$(losetup -a | grep "$CHR_IMG" | awk -F: '{print $1}' | sed 's#/dev/##'); [ -e "/dev/${LOOPDEV}p2" ]; then
    TARGET_DEV="/dev/${LOOPDEV}p2"
else
    echo "❌ Gagal menemukan partisi root CHR."
    exit 1
fi

mkdir -p /mnt
mount "$TARGET_DEV" /mnt

echo "[4/7] ⚙️ Konfigurasi IP otomatis untuk autorun..."
IFACE=$(ip route get 8.8.8.8 | grep -oP 'dev \K[^ ]+')
ADDRESS=$(ip addr show "$IFACE" | grep inet | grep global | awk '{print $2}' | head -n1)
GATEWAY=$(ip route | grep default | awk '{print $3}')

cat <<EOF > /mnt/rw/autorun.scr
/ip address add address=$ADDRESS interface=[/interface ethernet find where name=ether1]
/ip route add gateway=$GATEWAY
EOF

umount /mnt || true
kpartx -d "$CHR_IMG" 2>/dev/null || true
losetup -D

echo "[5/7] 💽 Mendeteksi disk utama untuk flashing..."
BOOTDISK=$(lsblk -ndo PKNAME,TYPE | awk '$2=="disk"{print $1}' | head -n1)
if [ -z "$BOOTDISK" ]; then
  BOOTDISK=$(lsblk -ndo NAME,TYPE | awk '$2=="disk"{print $1}' | head -n1)
fi
DISK_PATH="/dev/$BOOTDISK"

echo "🎯 Disk target: $DISK_PATH (proses tanpa konfirmasi)"

echo "[6/7] ✍️ Menulis image ke disk (flashing)..."
sync
dd if="$CHR_IMG" of="$DISK_PATH" bs=4M status=progress conv=fsync
sync

echo "[7/7] ✅ Flash selesai."
echo ""
echo "✅ Instalasi selesai!"
echo "📌 VPS perlu direboot agar bisa login via Winbox."
echo "   🔹 Username : admin"
echo "   🔹 Password : (kosongkan)"
echo "💡 Gunakan IP publik VPS Leaseweb kamu untuk login."
echo ""
read -rp "➡️  Reboot sekarang? (Y/N): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
    echo "🔄 Rebooting sekarang..."
    reboot -f
else
    echo "⏸️  Reboot dibatalkan. Silakan reboot manual nanti."
fi
echo ""
echo "✅ Instalasi selesai!"
echo "📌 VPS perlu direboot agar bisa login via Winbox."
echo "   🔹 Username : admin"
echo "   🔹 Password : (kosongkan)"
echo "💡 Gunakan IP publik VPS Leaseweb kamu untuk login."
echo ""