{"id":192,"date":"2025-05-06T01:05:20","date_gmt":"2025-05-06T01:05:20","guid":{"rendered":"https:\/\/abatablaster.xyz\/?page_id=192"},"modified":"2026-01-03T13:01:02","modified_gmt":"2026-01-03T13:01:02","slug":"upgrade-pakej","status":"publish","type":"page","link":"https:\/\/abatablaster.xyz\/index.php\/upgrade-pakej\/","title":{"rendered":"Upgrade Pakej"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"ms\">\n\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <title>Upgrade Pakej \u2013 AbataBlaster<\/title>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.22.2\/firebase-app-compat.js\"><\/script>\n  <script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.22.2\/firebase-auth-compat.js\"><\/script>\n  <script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.22.2\/firebase-firestore-compat.js\"><\/script>\n  <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/sweetalert2@11\"><\/script>\n  <style>\n    body {\n      background: #f1f8e9;\n      font-family: 'Poppins', Arial, sans-serif;\n    }\n\n    .card {\n      background: #fff;\n      padding: 25px;\n      border-radius: 10px;\n      box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n      max-width: 650px;\n      margin: 42px auto;\n    }\n\n    .pakej-header {\n      display: flex;\n      align-items: center;\n      gap: 16px;\n      background: linear-gradient(to right, #2e7d32, #66bb6a);\n      padding: 16px 20px;\n      border-radius: 12px;\n      margin-bottom: 25px;\n      color: #fff;\n    }\n\n    .logo-header {\n      width: 48px;\n      height: 48px;\n      border-radius: 12px;\n      background: #fff;\n      padding: 3px;\n    }\n\n    .pakej-title-text .judul {\n      margin: 0;\n      font-size: 18px;\n      font-weight: bold;\n    }\n\n    .pakej-title-text .slogan {\n      margin: 0;\n      font-size: 14px;\n      opacity: 0.9;\n    }\n\n    .pakej-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n      gap: 18px;\n      margin-top: 24px;\n    }\n\n    .pakej-box {\n      background: #fff;\n      border: 2px solid #e0e0e0;\n      border-radius: 12px;\n      padding: 15px;\n      box-shadow: 0 6px 20px rgba(0, 0, 0, 0.06);\n      transition: 0.3s;\n    }\n\n    .pakej-box.selected,\n    .pakej-box:hover {\n      border-color: #2e7d32;\n      background: #f1f8e9;\n    }\n\n    .pakej-box img {\n      max-width: 150px;\n      margin: 0 auto 10px;\n      display: block;\n    }\n\n    .btnPilih {\n      background: #2e7d32;\n      color: #fff;\n      padding: 10px;\n      border-radius: 6px;\n      border: none;\n      cursor: pointer;\n      width: 100%;\n      margin-top: 10px;\n    }\n\n    .btnPilih:hover {\n      background: #1b5e20;\n    }\n\n    .info-wallet {\n      background: #f7ffe6;\n      border-left: 5px solid #aee571;\n      border-radius: 10px;\n      margin: 12px 0 24px 0;\n      padding: 14px 18px;\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      font-size: 17px;\n    }\n\n    @media (max-width: 500px) {\n      .pakej-grid {\n        grid-template-columns: 1fr;\n      }\n\n      .card {\n        padding: 10px;\n      }\n    }\n  <\/style>\n<\/head>\n\n<body>\n  <div class=\"card\">\n\n    <div class=\"pakej-header\">\n      <img decoding=\"async\" src=\"https:\/\/abatablaster.xyz\/wp-content\/uploads\/2025\/05\/photo_2024-05-16_15-47-59.jpg\" alt=\"AbataBlaster\"\n        class=\"logo-header\" \/>\n      <div class=\"pakej-title-text\">\n        <h2 class=\"judul\">AbataBlaster<\/h2>\n        <p class=\"slogan\">Sistem Automasi WhatsApp &#038; Telegram #1 di Malaysia<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"info-wallet\">\n      <span>\ud83d\udcb0 <b>Baki Wallet:<\/b> <span id=\"wallet-balance\">RM0.00<\/span><\/span>\n      <a href=\"https:\/\/abatablaster.xyz\/index.php\/wallet\/\" target=\"_blank\"\n        style=\"background:#388e3c; color:#fff; border-radius:8px; padding:5px 16px; text-decoration:none;\">Info\n        Wallet<\/a>\n    <\/div>\n\n    <h3>\ud83d\ude80 <b>Naik Taraf Pakej Anda<\/b><\/h3>\n\n    <p style=\"margin:10px 0 10px 0; font-weight:700; color:#1b5e20;\">\n      \u2705 Cara bayaran sangat mudah (auto tolak dari wallet):\n    <\/p>\n\n    <ul style=\"\n  margin:0 0 10px 22px;\n  padding:0;\n  color:#333;\n  line-height:1.6;\n  font-size:14px;\n\">\n      <li>\n        \ud83d\udcb3 <b>Pilih pakej<\/b> &#038; klik butang\n        <span style=\"font-weight:600;\">Langgan \/ Aktifkan<\/span>\n      <\/li>\n      <li>\n        \u26a1 Baki wallet akan ditolak\n        <b>secara automatik<\/b>\n        <span style=\"color:#666;\">(tiada pembayaran luar)<\/span>\n      <\/li>\n      <li>\n        \ud83d\udccc <b>Untuk Telegram Blaster:<\/b>\n        hanya perlu <b>Pengaktifan Akaun<\/b> sahaja \u2014\n        tak kisah pakej mana,\n        <span style=\"font-weight:600;\">asalkan akaun anda AKTIF<\/span>,\n        terus boleh guna\n      <\/li>\n    <\/ul>\n\n    <p style=\"\n  font-size:13px;\n  color:#666;\n  margin-top:6px;\n\">\n      \ud83d\udca1 <b>Tip:<\/b> Semua pakej boleh ditambah bilangan\n      <b>mesej AI<\/b> atau <b>nombor WhatsApp<\/b>\n      semasa pembayaran.\n    <\/p>\n\n    <!-- \u2705 PAKEJ ASAS: Pengaktifan Akaun (sentiasa papar) -->\n    <div class=\"pakej-grid\" style=\"margin-top:12px;\">\n      <div class=\"pakej-box\" data-pakej=\"pengaktifan_akaun\" data-harga=\"15\">\n        <img decoding=\"async\" src=\"https:\/\/abatablaster.xyz\/wp-content\/uploads\/2026\/01\/aktifkan-akaun-min.png\" alt=\"Pengaktifan Akaun\"\n          style=\"\n    width: 100%;\n    max-width: 260px;\n    display: block;\n    margin: 0 auto 12px;\n    border-radius: 12px;\n  \" \/>\n        <h4 style=\"color:#2e7d32;text-align:center;\">Pengaktifan Akaun<\/h4>\n        <p class=\"text-center\" style=\"color:#555;\">1 WhatsApp \u00b7 100 mesej AI \u00b7 (10 akaun Telegram)<\/p>\n\n        <p class=\"harga-pakej\" style=\"text-align:center;color:#2e7d32;font-weight:bold;margin-bottom:8px;\">\n          RM15 \/ 30 hari\n        <\/p>\n\n        <ul style=\"font-size:13px; color:#222; margin:10px 0 18px 0;\">\n          <li>\u2705 Langganan aktif 30 hari<\/li>\n          <li>\u2705 1 nombor WhatsApp<\/li>\n          <li>\u2705 100 mesej AI<\/li>\n          <li>\u2705 10 akaun Telegram<\/li>\n        <\/ul>\n\n        <button class=\"btnPilih\">Aktifkan Akaun<\/button>\n      <\/div>\n    <\/div>\n\n    <!-- \u2705 Tickbox untuk buka pakej combo -->\n    <div style=\"margin:14px 0 6px 0;\">\n      <label style=\"display:flex;align-items:center;gap:10px;font-weight:600;color:#2e7d32;\">\n        <input type=\"checkbox\" id=\"toggleComboPakej\" \/>\n        Tunjuk Pakej Combo\n      <\/label>\n      <small style=\"color:#666;display:block;margin-top:6px;\">\n        * Pakej Combo sesuai untuk user heavy. Jika tidak, ambil \u201cPengaktifan Akaun\u201d dahulu.\n      <\/small>\n    <\/div>\n\n    <!-- \u2705 BARU: Wrap pilihan jenis pakej + tempoh (hanya bila combo dibuka) -->\n    <div id=\"comboControls\"\n      style=\"display:none; margin:14px 0 10px 0; padding:12px; border:1px dashed #c8e6c9; border-radius:12px; background:#f7fff3;\">\n      <div style=\"margin-bottom:12px;\">\n        <label for=\"kategoriPakej\"><b>Pilih Jenis Pakej:<\/b><\/label>\n        <select id=\"kategoriPakej\" style=\"margin-left:8px; padding:6px 10px; border-radius:7px;\">\n          <option value=\"ai_blaster\">Pakej AI + Blaster<\/option>\n          <option value=\"blaster_only\">Pakej Blaster Sahaja<\/option>\n        <\/select>\n      <\/div>\n\n      <div id=\"pilihanTempohDiv\" style=\"margin-bottom: 0;\">\n        <label><input type=\"radio\" name=\"jenisTempoh\" value=\"bulanan\" checked onchange=\"pilihTempoh(this.value)\">\n          Bulanan<\/label>\n        <label style=\"margin-left:16px;\"><input type=\"radio\" name=\"jenisTempoh\" value=\"tahunan\"\n            onchange=\"pilihTempoh(this.value)\"> Tahunan<\/label>\n      <\/div>\n    <\/div>\n\n    <!-- \u2705 Wrapper combo (default tutup) -->\n    <div id=\"comboWrapper\" style=\"display:none;\">\n\n      <div id=\"aiBlasterPakej\" class=\"pakej-grid\">\n        <!-- Basic -->\n        <div class=\"pakej-box\" data-pakej=\"basic\" data-harga=\"24\">\n          <img decoding=\"async\" src=\"https:\/\/abatablaster.xyz\/wp-content\/uploads\/2025\/05\/pakej_starter_optimized_2000-scaled.png\"\n            alt=\"Basic\" \/>\n          <h4 style=\"color:#388e3c;text-align:center;\">Basic<\/h4>\n          <p class=\"text-center\" style=\"color:#555;\">1 WhatsApp \u00b7 1,000 mesej\/sebulan<\/p>\n          <p class=\"harga-pakej\" style=\"text-align:center;color:#388e3c;font-weight:bold;margin-bottom:8px;\">\n            RM24\/bulan<br>\n            <span class=\"harga-tahunan\" style=\"font-size:13px; color:#888;\">atau RM240\/setahun (jimat RM48!)<\/span>\n          <\/p>\n          <ul style=\"font-size:13px; color:#222; margin:10px 0 18px 0;\">\n            <li>AI Auto Reply<\/li>\n            <li>Auto Follow-Up<\/li>\n            <li>Broadcast<\/li>\n            <li>Broadcast AI<\/li>\n          <\/ul>\n          <button class=\"btnPilih\">Langgan Sekarang<\/button>\n        <\/div>\n        <!-- Starter -->\n        <div class=\"pakej-box\" data-pakej=\"starter\" data-harga=\"49\">\n          <img decoding=\"async\" src=\"https:\/\/abatablaster.xyz\/wp-content\/uploads\/2025\/05\/pakej_basic_optimized_2000-scaled.png\"\n            alt=\"Starter\" \/>\n          <h4 style=\"color:#388e3c;text-align:center;\">Starter<\/h4>\n          <p class=\"text-center\" style=\"color:#555;\">2 WhatsApp \u00b7 3,000 mesej\/sebulan<\/p>\n          <p class=\"harga-pakej\" style=\"text-align:center;color:#388e3c;font-weight:bold;margin-bottom:8px;\">\n            RM49\/bulan<br>\n            <span class=\"harga-tahunan\" style=\"font-size:13px; color:#888;\">atau RM490\/setahun (jimat RM98!)<\/span>\n          <\/p>\n          <ul style=\"font-size:13px; color:#222; margin:10px 0 18px 0;\">\n            <li>AI Auto Reply<\/li>\n            <li>Auto Follow-Up<\/li>\n            <li>Broadcast<\/li>\n            <li>Broadcast AI<\/li>\n          <\/ul>\n          <button class=\"btnPilih\">Langgan Sekarang<\/button>\n        <\/div>\n        <!-- Pro -->\n        <div class=\"pakej-box\" data-pakej=\"pro\" data-harga=\"99\">\n          <img decoding=\"async\" src=\"https:\/\/abatablaster.xyz\/wp-content\/uploads\/2025\/05\/pakej_pro_optimized_2000-scaled.png\"\n            alt=\"Pro\" \/>\n          <h4 style=\"color:#388e3c;text-align:center;\">Pro<\/h4>\n          <p class=\"text-center\" style=\"color:#555;\">5 WhatsApp \u00b7 10,000 mesej\/sebulan<\/p>\n          <p class=\"harga-pakej\" style=\"text-align:center;color:#388e3c;font-weight:bold;margin-bottom:8px;\">\n            RM99\/bulan<br>\n            <span class=\"harga-tahunan\" style=\"font-size:13px; color:#888;\">atau RM999\/setahun (jimat RM189!)<\/span>\n          <\/p>\n          <ul style=\"font-size:13px; color:#222; margin:10px 0 18px 0;\">\n            <li>AI Auto Reply<\/li>\n            <li>Auto Follow-Up<\/li>\n            <li>Broadcast<\/li>\n            <li>Broadcast AI<\/li>\n          <\/ul>\n          <button class=\"btnPilih\">Langgan Sekarang<\/button>\n        <\/div>\n        <!-- Enterprise -->\n        <div class=\"pakej-box\" data-pakej=\"enterprise\" data-harga=\"169\">\n          <img decoding=\"async\" src=\"https:\/\/abatablaster.xyz\/wp-content\/uploads\/2025\/05\/pakej-entreprise.png\" alt=\"Enterprise\" \/>\n          <h4 style=\"color:#8e24aa;text-align:center;\">Enterprise<\/h4>\n          <p class=\"text-center\" style=\"color:#555;\">7+ WhatsApp \u00b7 20,000+ mesej\/sebulan<\/p>\n          <p class=\"harga-pakej\" style=\"text-align:center;color:#8e24aa;font-weight:bold;margin-bottom:8px;\">\n            RM169+\/bulan<br>\n            <span class=\"harga-tahunan\" style=\"font-size:13px; color:#888;\">atau RM1700+\/setahun<\/span>\n          <\/p>\n          <ul style=\"font-size:13px; color:#222; margin:10px 0 18px 0;\">\n            <li>AI Auto Reply<\/li>\n            <li>Auto Follow-Up<\/li>\n            <li>Broadcast<\/li>\n            <li>Broadcast AI<\/li>\n          <\/ul>\n          <button class=\"btnPilih\">Langgan Sekarang<\/button>\n        <\/div>\n      <\/div>\n\n      <div id=\"blasterOnlyPakej\" class=\"pakej-grid\" style=\"display:none;\">\n        <!-- Blaster Lite -->\n        <div class=\"pakej-box\" data-pakej=\"blaster_lite\" data-harga=\"12\">\n          <img decoding=\"async\" src=\"https:\/\/abatablaster.xyz\/wp-content\/uploads\/2025\/07\/photo_2025-07-22_08-48-02.jpg\"\n            alt=\"Blaster Lite\" \/>\n          <h4 style=\"color:#1976d2;text-align:center;\">Blaster Lite<\/h4>\n          <p class=\"text-center\" style=\"color:#555;\">1 WhatsApp \u00b7 Tiada mesej AI<\/p>\n          <p class=\"harga-pakej\" style=\"text-align:center;color:#1976d2;font-weight:bold;margin-bottom:8px;\">\n            RM12\/bulan<br>\n            <span class=\"harga-tahunan\" style=\"font-size:13px; color:#888;\">atau RM120\/setahun (jimat RM24!)<\/span>\n          <\/p>\n          <ul style=\"font-size:13px; color:#222; margin:10px 0 18px 0;\">\n            <li>Hanya Blaster<\/li>\n            <li>Tiada AI<\/li>\n            <li>1 WhatsApp Aktif<\/li>\n            <li>Smart Warmup, Blast Contacts<\/li>\n          <\/ul>\n          <button class=\"btnPilih\">Langgan Sekarang<\/button>\n        <\/div>\n        <!-- Blaster Basic -->\n        <div class=\"pakej-box\" data-pakej=\"blaster_basic\" data-harga=\"29\">\n          <img decoding=\"async\" src=\"https:\/\/abatablaster.xyz\/wp-content\/uploads\/2025\/07\/photo_2025-07-22_08-48-05-e1753145508708.jpg\"\n            alt=\"Blaster Basic\" \/>\n          <h4 style=\"color:#1976d2;text-align:center;\">Blaster Basic<\/h4>\n          <p class=\"text-center\" style=\"color:#555;\">3 WhatsApp \u00b7 Tiada mesej AI<\/p>\n          <p class=\"harga-pakej\" style=\"text-align:center;color:#1976d2;font-weight:bold;margin-bottom:8px;\">\n            RM29\/bulan<br>\n            <span class=\"harga-tahunan\" style=\"font-size:13px; color:#888;\">atau RM290\/setahun (jimat RM58!)<\/span>\n          <\/p>\n          <ul style=\"font-size:13px; color:#222; margin:10px 0 18px 0;\">\n            <li>Hanya Blaster<\/li>\n            <li>Tiada AI<\/li>\n            <li>3 WhatsApp Aktif<\/li>\n            <li>Smart Warmup, Blast Contacts<\/li>\n          <\/ul>\n          <button class=\"btnPilih\">Langgan Sekarang<\/button>\n        <\/div>\n        <!-- Blaster Starter -->\n        <div class=\"pakej-box\" data-pakej=\"blaster_starter\" data-harga=\"55\">\n          <img decoding=\"async\" src=\"https:\/\/abatablaster.xyz\/wp-content\/uploads\/2025\/07\/photo_2025-07-22_08-48-08.jpg\"\n            alt=\"Blaster Starter\" \/>\n          <h4 style=\"color:#1976d2;text-align:center;\">Blaster Starter<\/h4>\n          <p class=\"text-center\" style=\"color:#555;\">7 WhatsApp \u00b7 Tiada mesej AI<\/p>\n          <p class=\"harga-pakej\" style=\"text-align:center;color:#1976d2;font-weight:bold;margin-bottom:8px;\">\n            RM55\/bulan<br>\n            <span class=\"harga-tahunan\" style=\"font-size:13px; color:#888;\">atau RM550\/setahun (jimat RM110!)<\/span>\n          <\/p>\n          <ul style=\"font-size:13px; color:#222; margin:10px 0 18px 0;\">\n            <li>Hanya Blaster<\/li>\n            <li>Tiada AI<\/li>\n            <li>7 WhatsApp Aktif<\/li>\n            <li>Smart Warmup, Blast Contacts<\/li>\n          <\/ul>\n          <button class=\"btnPilih\">Langgan Sekarang<\/button>\n        <\/div>\n        <!-- Blaster Pro -->\n        <div class=\"pakej-box\" data-pakej=\"blaster_pro\" data-harga=\"75\">\n          <img decoding=\"async\" src=\"https:\/\/abatablaster.xyz\/wp-content\/uploads\/2025\/07\/photo_2025-07-22_08-48-15.jpg\"\n            alt=\"Blaster Pro\" \/>\n          <h4 style=\"color:#1976d2;text-align:center;\">Blaster Pro<\/h4>\n          <p class=\"text-center\" style=\"color:#555;\">10 WhatsApp \u00b7 Tiada mesej AI<\/p>\n          <p class=\"harga-pakej\" style=\"text-align:center;color:#1976d2;font-weight:bold;margin-bottom:8px;\">\n            RM75\/bulan<br>\n            <span class=\"harga-tahunan\" style=\"font-size:13px; color:#888;\">atau RM750\/setahun (jimat RM150!)<\/span>\n          <\/p>\n          <ul style=\"font-size:13px; color:#222; margin:10px 0 18px 0;\">\n            <li>Hanya Blaster<\/li>\n            <li>Tiada AI<\/li>\n            <li>10 WhatsApp Aktif<\/li>\n            <li>Smart Warmup, Blast Contacts<\/li>\n          <\/ul>\n          <button class=\"btnPilih\">Langgan Sekarang<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n  <script>\n    const firebaseConfig = {\n      apiKey: \"AIzaSyBou8nlJ7uPZ4ioOJapzC8Dn3-K7Qs-yco\",\n      authDomain: \"whatsapp-ai-saas.firebaseapp.com\",\n      projectId: \"whatsapp-ai-saas\"\n    };\n    if (!firebase.apps.length) firebase.initializeApp(firebaseConfig);\n    const auth = firebase.auth();\n    const db = firebase.firestore();\n\n    let currentUser = null;\n    let walletBalance = 0;\n\n    auth.onAuthStateChanged(async (user) => {\n      if (user) {\n        currentUser = user;\n        \/\/ Papar baki wallet kalau login\n        const walletDoc = await db.collection(\"wallet\").doc(user.uid).get();\n        walletBalance = walletDoc.exists ? (walletDoc.data().balance || 0) : 0;\n        document.getElementById(\"wallet-balance\").textContent = \"RM\" + Number(walletBalance).toFixed(2);\n      } else {\n        currentUser = null;\n        walletBalance = 0;\n        document.getElementById(\"wallet-balance\").textContent = \"RM0.00\";\n      }\n    });\n\n    \/\/ Pilih Pakej Box\n    document.querySelectorAll(\".pakej-box\").forEach(box => {\n      box.addEventListener(\"click\", function () {\n        document.querySelectorAll(\".pakej-box\").forEach(b => b.classList.remove(\"selected\"));\n        box.classList.add(\"selected\");\n\n        \/\/ \u2705 Jika klik Pengaktifan Akaun, lock tempoh kepada BULANAN sahaja\n        if (box.dataset.pakej === \"pengaktifan_akaun\") {\n          document.querySelector('input[name=\"jenisTempoh\"][value=\"bulanan\"]').checked = true;\n          document.querySelector('input[name=\"jenisTempoh\"][value=\"tahunan\"]').disabled = true;\n        } else {\n          document.querySelector('input[name=\"jenisTempoh\"][value=\"tahunan\"]').disabled = false;\n        }\n      });\n    });\n\n    \/\/ ======== TAMBAHKAN DI SINI ========\n    async function semakDowngradeAlert(pakej, addonNomborBaru) {\n      \/\/ Had ikut pakej terpilih\n      const hadPakejBaru = {\n        pengaktifan_akaun: 1,\n        basic: 1, starter: 2, pro: 5, enterprise: 7,\n        blaster_lite: 1, blaster_basic: 3, blaster_starter: 7, blaster_pro: 10\n      }[pakej] || 1;\n\n      \/\/ ===== BACA add-on aktif sedia ada dari users\/{uid} =====\n      let addonAktifSediaAda = 0;\n      const userDoc = await db.collection('users').doc(currentUser.uid).get();\n      if (userDoc.exists) {\n        const u = userDoc.data() || {};\n        const addonQty = Number(u.addon_whatsapp) || 0;\n        const expStr = u.addon_whatsapp_expiry;\n        const expOk = expStr && new Date(expStr) > new Date();\n        if (addonQty > 0 && expOk) addonAktifSediaAda = addonQty;\n      }\n\n      \/\/ Kapasiti efektif = pakej + add-on aktif sedia ada + add-on baru (kalau ada)\n      const maxBaru = hadPakejBaru + addonAktifSediaAda + (addonNomborBaru || 0);\n\n      \/\/ ===== Ambil nombor sedia ada =====\n      const userNumbersDoc = await db.collection('user_numbers').doc(currentUser.uid).get();\n      let nomborArray = [];\n      if (userNumbersDoc.exists) {\n        const data = userNumbersDoc.data() || {};\n        if (Array.isArray(data.nombor)) {\n          nomborArray = data.nombor; \/\/ array string\n        } else if (Array.isArray(data.list)) {\n          nomborArray = data.list.map(x => x.no || x.phone || x.number || x.msisdn).filter(Boolean);\n        } else {\n          \/\/ Objekt lama: kunci = nombor (cth: \"6012xxxx\")\n          nomborArray = Object.keys(data).filter(k => \/^60\\d{7,12}$\/.test(String(k)));\n        }\n      }\n      if (nomborArray.length > maxBaru) {\n        \/\/ =========== PATCH: PILIH NOMBOR KEKAL ============\n        return Swal.fire({\n          title: 'Pilih Nombor WhatsApp Untuk Dikekalkan',\n          html: `\n    <div style=\"color:#444;font-size:15px;margin-bottom:12px;\">\n      Anda sedang upgrade ke pakej <b>${pakej}<\/b>.<br>\n      <b>Had nombor WhatsApp aktif:<\/b> ${maxBaru} sahaja.<br>\n      <b>Jumlah nombor anda sekarang:<\/b> ${nomborArray.length}.<br>\n      Sila pilih nombor yang anda ingin KEKALKAN.\n    <\/div>\n    <div style=\"max-height:260px;overflow:auto;text-align:left;\">\n${nomborArray.map((no, i) => {\n            let displayNo = (typeof no === \"object\" && (no.no || no.phone)) ? (no.no || no.phone) : no;\n            return `\n    <div>\n      <label>\n        <input type=\"checkbox\" class=\"pilihNomborKekal\" value=\"${displayNo}\" ${i < maxBaru ? 'checked' : ''}>\n        ${displayNo}\n      <\/label>\n    <\/div>\n  `;\n          }).join('')}\n    <\/div>\n    <small style=\"color:#c62828;display:block;margin-top:6px;\">\n      * Pilih tepat ${maxBaru} nombor sahaja untuk kekal.<br>\n      Baki nombor yang tidak dipilih akan dipadam selepas upgrade.\n    <\/small>\n  `,\n          focusConfirm: false,\n          showCancelButton: true,\n          confirmButtonText: \"Sahkan Pilihan & Teruskan\",\n          cancelButtonText: \"Batal\",\n          allowOutsideClick: false,\n          allowEscapeKey: false,\n          didOpen: () => {\n            \/\/ Limit tick ikut maxBaru\n            const checkboxes = Swal.getPopup().querySelectorAll('.pilihNomborKekal');\n            checkboxes.forEach(chk => {\n              chk.addEventListener('change', () => {\n                const checkedCount = Array.from(checkboxes).filter(c => c.checked).length;\n                if (checkedCount > maxBaru) {\n                  chk.checked = false;\n                }\n              });\n            });\n          },\n          preConfirm: () => {\n            const checked = Array.from(document.querySelectorAll('.pilihNomborKekal:checked')).map(e => e.value);\n            if (checked.length !== maxBaru) {\n              Swal.showValidationMessage(`Anda perlu pilih tepat ${maxBaru} nombor!`);\n              return false;\n            }\n            return checked;\n          }\n        }).then(res => {\n          if (res.isConfirmed) return res.value;\n          return false;\n        });\n      }\n      \/\/ Kalau tak perlu alert, auto proceed\n      return true;\n    }\n\n    \/\/ Bayar dari wallet\n    document.querySelectorAll(\".btnPilih\").forEach(btn => {\n      btn.addEventListener(\"click\", async function (e) {\n        const box = btn.closest(\".pakej-box\");\n        const pakej = box.dataset.pakej;\n        const kategoriEl = document.getElementById(\"kategoriPakej\");\n        const kategori = kategoriEl ? kategoriEl.value : \"ai_blaster\"; \/\/ fallback\n        const isBlasterOnly = (kategori === \"blaster_only\");\n        const harga = Number(box.dataset.harga);\n\n        let tempoh = document.querySelector('input[name=\"jenisTempoh\"]:checked').value;\n\n        \/\/ \u2705 Pengaktifan Akaun hanya 30 hari (bulanan sahaja)\n        if (pakej === \"pengaktifan_akaun\") {\n          tempoh = \"bulanan\";\n          document.querySelector('input[name=\"jenisTempoh\"][value=\"bulanan\"]').checked = true;\n          document.querySelector('input[name=\"jenisTempoh\"][value=\"tahunan\"]').disabled = true;\n        } else {\n          document.querySelector('input[name=\"jenisTempoh\"][value=\"tahunan\"]').disabled = false;\n        }\n\n        if (!currentUser) {\n          Swal.fire(\"Ralat\", \"Sila login dahulu.\", \"error\");\n          return;\n        }\n\n        \/\/ Confirm Deduct\n        \/\/ PAPAR POPUP ADD-ON\n        const { value: addonInput } = await Swal.fire({\n          title: \"Nak tambah Add-On?\",\n          html: `\n  <div style=\"text-align:left; font-size:14px;\">\n    <label style=\"margin-bottom:4px; display:block;\"><b>\u2795 Tambah Nombor WhatsApp:<\/b><\/label>\n    <select id=\"addonNombor\" class=\"swal2-select\" style=\"width:90%; max-width:300px; margin-bottom:12px;\">\n      <option value=\"0\">Tiada<\/option>\n      <option value=\"1\">1 nombor (RM10)<\/option>\n      <option value=\"2\">2 nombor (RM18)<\/option>\n      <option value=\"3\">3 nombor (RM25)<\/option>\n      <option value=\"4\">4 nombor (RM30)<\/option>\n      <option value=\"5\">5 nombor (RM35)<\/option>\n    <\/select>\n\n    ${isBlasterOnly ? `\n      <div style=\"margin-top:10px;padding:10px;border:1px dashed #bbb;border-radius:10px;color:#555;\">\n        \ud83d\udd12 <b>Add-On Mesej AI tidak tersedia<\/b> untuk <b>Pakej Blaster Sahaja<\/b>.\n      <\/div>\n    ` : `\n      <label style=\"margin-top:12px; margin-bottom:4px; display:block;\"><b>\u2795 Tambah Mesej AI:<\/b><\/label>\n      <select id=\"addonMesej\" class=\"swal2-select\" style=\"width:90%; max-width:300px;\">\n        <option value=\"0\">Tiada<\/option>\n        <option value=\"1000\">1,000 mesej (RM10)<\/option>\n        <option value=\"2000\">2,000 mesej (RM18)<\/option>\n        <option value=\"3000\">3,000 mesej (RM25)<\/option>\n        <option value=\"4000\">4,000 mesej (RM30)<\/option>\n        <option value=\"5000\">5,000 mesej (RM35)<\/option>\n      <\/select>\n    `}\n\n    <div style=\"margin-top:16px; color:#c62828;\">\n      <b>* Add-On hanya sah 30 hari dari tarikh pembelian, walaupun anda langgan pakej tahunan.<\/b>\n    <\/div>\n  <\/div>\n  `,\n          confirmButtonText: \"Seterusnya\",\n          focusConfirm: false,\n          preConfirm: () => {\n            const nombor = Number(document.getElementById(\"addonNombor\").value);\n            const mesej = isBlasterOnly ? 0 : Number(document.getElementById(\"addonMesej\").value);\n            return { nombor, mesej };\n          }\n        });\n        if (!addonInput) return;\n\n        let addonHarga = 0;\n        const hargaNomborMap = { 1: 10, 2: 18, 3: 25, 4: 30, 5: 35 };\n        const hargaMesejMap = { 1000: 10, 2000: 18, 3000: 25, 4000: 30, 5000: 35 };\n\n        addonHarga += hargaNomborMap[addonInput.nombor] || 0;\n        addonHarga += hargaMesejMap[addonInput.mesej] || 0;\n\n        const totalHarga = harga + addonHarga;\n\n        \/\/ --- Tunjukkan popup pengesahan harga dahulu ---\n        const confirm = await Swal.fire({\n          title: \"Pengesahan Akhir\",\n          html: `\nPakej: <b>${pakej}<\/b><br\/>\nHarga Pakej: RM${harga.toFixed(2)}<br\/>\nTambahan Nombor: ${addonInput.nombor} (RM${(hargaNomborMap[addonInput.nombor] || 0).toFixed(2)})<br\/>\nTambahan Mesej AI: ${addonInput.mesej} (RM${(hargaMesejMap[addonInput.mesej] || 0).toFixed(2)})<br\/>\n<hr\/>\n<b>Jumlah Keseluruhan: RM${totalHarga.toFixed(2)}<\/b>\n<br>\n<span style=\"color:#c62828; font-weight:bold;\">\n* Add-On hanya sah 30 hari (1 bulan) walaupun langgan pakej tahunan!\n<\/span>\n`,\n          showCancelButton: true,\n          confirmButtonText: \"Bayar & Upgrade\",\n          cancelButtonText: \"Batal\",\n        });\n\n        if (!confirm.isConfirmed) return;\n\n        \/\/ Semak wallet cukup tak\n        if (walletBalance < totalHarga) {\n          Swal.fire({\n            icon: \"error\",\n            title: \"Baki Wallet Tak Cukup!\",\n            html: \"Baki wallet anda hanya <b>RM\" + walletBalance.toFixed(2) + \"<\/b>. Sila <a href='https:\/\/abatablaster.xyz\/index.php\/wallet\/' target='_blank'>topup wallet<\/a> sebelum upgrade.\",\n            confirmButtonText: \"OK\"\n          });\n          return;\n        }\n\n        \/\/ === Selepas confirm, baru semak downgrade ===\n        const proceedDowngrade = await semakDowngradeAlert(pakej, addonInput.nombor);\n        if (!proceedDowngrade) return; \/\/ User klik batal, stop proses\n\n        \/\/ PATCH: jika hasil semakDowngradeAlert adalah array, jadikan sebagai nomborKekal\n        const nomborKekal = Array.isArray(proceedDowngrade) ? proceedDowngrade : undefined;\n\n        \/\/ Proses Deduct \u2013 Patch ikut logic sistem anda!\n        try {\n          \/\/ PATCH: bodyReq, guna tempoh yang di-override\n          const bodyReq = {\n            uid: currentUser.uid,\n            pakej,\n            addon_ai: addonInput.mesej,\n            addon_whatsapp: addonInput.nombor,\n            tempoh \/\/ <-- PATCH di sini!\n          };\n          \/\/ PATCH: Jika nomborKekal wujud, tambah ke body\n          if (nomborKekal) bodyReq.nombor_kekal = nomborKekal;\n\n          const resp = await fetch(\"https:\/\/us-central1-whatsapp-ai-saas.cloudfunctions.net\/walletUpgrade\", {\n            method: \"POST\",\n            headers: { \"Content-Type\": \"application\/json\" },\n            body: JSON.stringify(bodyReq)\n          });\n          const data = await resp.text();\n          if (resp.ok) {\n            Swal.fire(\"Berjaya!\", data, \"success\").then(() => window.location.reload());\n          } else {\n            Swal.fire(\"Gagal\", data, \"error\");\n          }\n        } catch (err) {\n          Swal.fire(\"Ralat\", err.message, \"error\");\n        }\n      });\n    });\n\n    \/\/ Kategori Dropdown Handler\n    document.getElementById(\"kategoriPakej\").addEventListener(\"change\", function () {\n      const kategori = this.value;\n      document.getElementById(\"aiBlasterPakej\").style.display = (kategori === \"ai_blaster\") ? \"grid\" : \"none\";\n      document.getElementById(\"blasterOnlyPakej\").style.display = (kategori === \"blaster_only\") ? \"grid\" : \"none\";\n\n      \/\/ \u2705 safety: bila tukar kategori, pastikan tahunan tak terkunci\n      document.querySelector('input[name=\"jenisTempoh\"][value=\"tahunan\"]').disabled = false;\n    });\n\n    \/\/ \u2705 Toggle paparan pakej combo\n    document.getElementById(\"toggleComboPakej\").addEventListener(\"change\", function () {\n      const on = this.checked;\n      document.getElementById(\"comboWrapper\").style.display = on ? \"block\" : \"none\";\n      document.getElementById(\"comboControls\").style.display = on ? \"block\" : \"none\";\n\n      if (on) {\n        \/\/ \u2705 apply kategori semasa (ai_blaster \/ blaster_only)\n        const kategori = document.getElementById(\"kategoriPakej\").value;\n        document.getElementById(\"aiBlasterPakej\").style.display = (kategori === \"ai_blaster\") ? \"grid\" : \"none\";\n        document.getElementById(\"blasterOnlyPakej\").style.display = (kategori === \"blaster_only\") ? \"grid\" : \"none\";\n\n        \/\/ \u2705 apply harga ikut radio semasa\n        const r = document.querySelector('input[name=\"jenisTempoh\"]:checked');\n        if (r) pilihTempoh(r.value);\n      }\n    });\n\n    \/\/ Harga mapping untuk bulanan\/tahunan\n    const hargaPakej = {\n      \/\/ AI + Blaster\n      pengaktifan_akaun: { bulanan: 15, tahunan: null },\n      basic: { bulanan: 24, tahunan: 240 },\n      starter: { bulanan: 49, tahunan: 490 },\n      pro: { bulanan: 99, tahunan: 999 },\n      enterprise: { bulanan: 169, tahunan: 1700 },\n      \/\/ Blaster Only\n      blaster_lite: { bulanan: 12, tahunan: 120 },\n      blaster_basic: { bulanan: 29, tahunan: 290 },\n      blaster_starter: { bulanan: 55, tahunan: 550 },\n      blaster_pro: { bulanan: 75, tahunan: 750 },\n\n    };\n\n    \/\/ Tukar harga dan label UI bila radio dipilih\n    \/\/ Tukar harga dan label UI bila radio dipilih\n    function pilihTempoh(tempohGlobal) {\n      document.querySelectorAll('.pakej-box').forEach(box => {\n        const pakej = box.dataset.pakej;\n        if (!hargaPakej[pakej]) return;\n\n        \/\/ \u2705 tempoh untuk kad ini sahaja (jangan ubah global)\n        const isPengaktifan = (pakej === \"pengaktifan_akaun\");\n        const tempohCard = isPengaktifan ? \"bulanan\" : tempohGlobal;\n\n        const hargaBulanan = hargaPakej[pakej].bulanan;\n        const hargaTahunan = hargaPakej[pakej].tahunan;\n        const harga = hargaPakej[pakej][tempohCard];\n\n        \/\/ simpan harga semasa pada data-harga (dipakai masa \u201cLanggan Sekarang\u201d)\n        box.setAttribute('data-harga', harga);\n\n        \/\/ kemas kini label harga\n        const priceText = box.querySelector('.harga-pakej');\n        if (!priceText) return;\n\n        const jimat = (hargaBulanan && hargaTahunan) ? (hargaBulanan * 12 - hargaTahunan) : 0;\n        const txtJimat = jimat > 0 ? ` (jimat RM${jimat}!)` : '';\n\n        if (tempohCard === \"tahunan\") {\n          priceText.innerHTML = `RM${harga}\/setahun${txtJimat}`;\n        } else {\n          const tahunanLine = hargaTahunan ? `\n  <span class=\"harga-tahunan\" style=\"font-size:13px; color:#888;\">\n    atau RM${hargaTahunan}\/setahun${txtJimat}\n  <\/span>` : '';\n\n          if (isPengaktifan) {\n            priceText.innerHTML = `RM${harga} \/ 30 hari`;\n          } else {\n            priceText.innerHTML = `RM${harga}\/bulan<br>${tahunanLine}`;\n          }\n        }\n      });\n    }\n\n    document.addEventListener('DOMContentLoaded', () => {\n      const r = document.querySelector('input[name=\"jenisTempoh\"]:checked');\n      if (r) pilihTempoh(r.value);\n    });\n\n  <\/script>\n<\/body>\n\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Upgrade Pakej \u2013 AbataBlaster AbataBlaster Sistem Automasi WhatsApp &#038; Telegram #1 di Malaysia \ud83d\udcb0 Baki Wallet: RM0.00 Info Wallet \ud83d\ude80 Naik Taraf Pakej Anda \u2705 Cara bayaran sangat mudah (auto tolak dari wallet): \ud83d\udcb3 Pilih pakej &#038; klik butang Langgan \/ Aktifkan \u26a1 Baki wallet akan ditolak secara automatik (tiada pembayaran luar) \ud83d\udccc Untuk Telegram [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-192","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/abatablaster.xyz\/index.php\/wp-json\/wp\/v2\/pages\/192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abatablaster.xyz\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/abatablaster.xyz\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/abatablaster.xyz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abatablaster.xyz\/index.php\/wp-json\/wp\/v2\/comments?post=192"}],"version-history":[{"count":48,"href":"https:\/\/abatablaster.xyz\/index.php\/wp-json\/wp\/v2\/pages\/192\/revisions"}],"predecessor-version":[{"id":1273,"href":"https:\/\/abatablaster.xyz\/index.php\/wp-json\/wp\/v2\/pages\/192\/revisions\/1273"}],"wp:attachment":[{"href":"https:\/\/abatablaster.xyz\/index.php\/wp-json\/wp\/v2\/media?parent=192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}