#!/usr/bin/env python3
"""WhatsApp AI Bot Indonesia 2026 - Full PDF Report Generator"""

import os
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
from reportlab.lib.colors import HexColor, white, grey
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    PageBreak, HRFlowable
)
from datetime import datetime

PRIMARY   = HexColor("#075e54")
SECONDARY = HexColor("#128c7e")
ACCENT    = HexColor("#25d366")
DARK      = HexColor("#1a1a2e")
BG_LIGHT  = HexColor("#f0f2f5")
WARN      = HexColor("#e74c3c")
GREEN_OK  = HexColor("#1b5e20")

PAGE_W, PAGE_H = A4

def page_num(c, doc):
    c.saveState(); c.setFont("Helvetica",8); c.setFillColor(grey)
    c.drawRightString(PAGE_W-2*cm,1.5*cm,f"Hal {doc.page}")
    c.drawString(2*cm,1.5*cm,"Riset WhatsApp AI Bot — Indonesia 2026")
    c.setStrokeColor(ACCENT); c.line(2*cm,1.3*cm, PAGE_W-2*cm,1.3*cm)
    c.restoreState()

styles = getSampleStyleSheet()

sT  = ParagraphStyle('sT', parent=styles['Title'], fontSize=28, textColor=white, alignment=TA_CENTER, spaceAfter=6, fontName='Helvetica-Bold')
sSt = ParagraphStyle('sSt', parent=styles['Normal'], fontSize=14, textColor=HexColor("#c8e6c9"), alignment=TA_CENTER, spaceAfter=20)
sH1 = ParagraphStyle('H1', parent=styles['Heading1'], fontSize=18, textColor=PRIMARY, spaceBefore=20, spaceAfter=10, fontName='Helvetica-Bold')
sH2 = ParagraphStyle('H2', parent=styles['Heading2'], fontSize=14, textColor=SECONDARY, spaceBefore=14, spaceAfter=6, fontName='Helvetica-Bold')
sH3 = ParagraphStyle('H3', parent=styles['Heading3'], fontSize=12, textColor=DARK, spaceBefore=10, spaceAfter=4, fontName='Helvetica-Bold')
sB  = ParagraphStyle('B', parent=styles['Normal'], fontSize=10, textColor=DARK, leading=15, alignment=TA_JUSTIFY, spaceAfter=6)
sBul= ParagraphStyle('Bul', parent=sB, leftIndent=18, bulletIndent=6, spaceBefore=2, spaceAfter=2)
sSm = ParagraphStyle('Sm', parent=styles['Normal'], fontSize=8, textColor=grey, leading=10)
sTH = ParagraphStyle('TH', parent=styles['Normal'], fontSize=8, textColor=white, alignment=TA_CENTER, fontName='Helvetica-Bold', leading=10)
sTC = ParagraphStyle('TC', parent=styles['Normal'], fontSize=8, textColor=DARK, alignment=TA_LEFT, fontName='Helvetica', leading=10)
sRev= ParagraphStyle('Rev', parent=sB, fontSize=9, leftIndent=10, rightIndent=10, backColor=BG_LIGHT, borderPadding=8, fontName='Helvetica-Oblique', leading=13)
sPro= ParagraphStyle('Pro', parent=sBul, textColor=GREEN_OK)
sCon= ParagraphStyle('Con', parent=sBul, textColor=WARN)

def h1(t): return Paragraph(t, sH1)
def h2(t): return Paragraph(t, sH2)
def h3(t): return Paragraph(t, sH3)
def b(t):  return Paragraph(t, sB)
def bul(t, st=None): return Paragraph(f"•  {t}", st or sBul)
def sp(h=6): return Spacer(1, h)
def hr(): return HRFlowable(width="100%", thickness=0.5, color=ACCENT, spaceAfter=8, spaceBefore=4)
def star(n): return "★"*n + "☆"*(5-n)
def rev(t): return Paragraph(f'<i>"{t}"</i>', sRev)

def tbl(headers, rows, col_widths):
    hdr = [Paragraph(h, sTH) for h in headers]
    data = [hdr]
    for r in rows:
        data.append([Paragraph(str(c), sTC) for c in r])
    t = Table(data, colWidths=col_widths, repeatRows=1)
    cmds = [
        ('BACKGROUND',(0,0),(-1,0),PRIMARY),('TEXTCOLOR',(0,0),(-1,0),white),
        ('GRID',(0,0),(-1,-1),0.5,HexColor("#bdbdbd")),('VALIGN',(0,0),(-1,-1),'TOP'),
        ('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5),
        ('LEFTPADDING',(0,0),(-1,-1),4),('RIGHTPADDING',(0,0),(-1,-1),4),
    ]
    for i in range(1,len(data)):
        bg = HexColor("#e8f5e9") if i%2==0 else white
        cmds.append(('BACKGROUND',(0,i),(-1,i),bg))
    t.setStyle(TableStyle(cmds))
    return t

def profile(name, web, origin, price, target, feats, pros, cons, review=None, cocok=None):
    S = []
    S.append(h2(name)); S.append(b(f"<b>{web}</b> | {origin} | <b>{price}</b> | Target: {target}"))
    S.append(sp(4)); S.append(b("<b>Fitur Unggulan:</b>"))
    for f in feats: S.append(bul(f))
    S.append(sp(4)); S.append(b("<b>Kelebihan:</b>"))
    for p in pros: S.append(bul(p, sPro))
    S.append(sp(4)); S.append(b("<b>Kekurangan:</b>"))
    for c in cons: S.append(bul(c, sCon))
    if review: S.append(sp(4)); S.append(rev(review))
    if cocok: S.append(sp(4)); S.append(b(f"<b>Cocok untuk:</b> {cocok}"))
    S.append(sp(12))
    return S

# ═══════════════ BUILD ═══════════════
doc = SimpleDocTemplate(
    "/app/working/workspaces/default/Laporan_Riset_WhatsApp_AI_Bot_Indonesia_2026.pdf",
    pagesize=A4, rightMargin=1.8*cm, leftMargin=1.8*cm, topMargin=2*cm, bottomMargin=2.5*cm,
    title="Riset WhatsApp AI Bot Indonesia 2026", author="Agustini"
)

S = []

# ─── COVER ───
S.append(sp(3*cm))
cover = Table([
    [Paragraph("LAPORAN RISET KOMPREHENSIF", sSt)],
    [Paragraph("Layanan WhatsApp Bot AI<br/>di Indonesia 2026", sT)],
    [sp(1,25)],
    [Paragraph("Perbandingan Fitur, Harga, Keunggulan,<br/>Kekurangan & Ulasan Pengguna", sSt)],
    [sp(1,50)],
    [Paragraph(f"Disusun: {datetime.now().strftime('%d %B %Y')}", ParagraphStyle('xD',parent=sB,fontSize=11,textColor=white,alignment=TA_CENTER))],
    [Paragraph("oleh Agustini — Asisten Riset", ParagraphStyle('xA',parent=sB,fontSize=11,textColor=HexColor("#a5d6a7"),alignment=TA_CENTER))],
], colWidths=[PAGE_W-3.6*cm])
cover.setStyle(TableStyle([
    ('BACKGROUND',(0,0),(-1,-1),PRIMARY),('ALIGN',(0,0),(-1,-1),'CENTER'),
    ('VALIGN',(0,0),(-1,-1),'MIDDLE'),('TOPPADDING',(0,0),(-1,0),30),
    ('BOTTOMPADDING',(0,-1),(-1,-1),40),('LEFTPADDING',(0,0),(-1,-1),30),
    ('RIGHTPADDING',(0,0),(-1,-1),30),
]))
S.append(cover); S.append(PageBreak())

# ─── TOC ───
S.append(h1("Daftar Isi")); S.append(hr())
toc = [
    "1. Ringkasan Eksekutif","2. Metodologi Riset","3. Daftar Provider",
    "4. Tabel Perbandingan Utama (8 Dimensi)","5. Profil Detail 13 Provider",
    "6. Perbandingan Harga Detail","7. Ulasan & Keluhan Pengguna",
    "8. Panduan Memilih (Tipe Bisnis)","9. Kesimpulan & Rekomendasi Akhir",
    "10. Checklist Sebelum Membeli"
]
for t in toc: S.append(Paragraph(t, sB))
S.append(PageBreak())

# ─── 1. EXEC SUMMARY ───
S.append(h1("1. Ringkasan Eksekutif")); S.append(hr())
S.append(b("WhatsApp mendominasi komunikasi digital Indonesia dengan <b>112+ juta pengguna aktif</b> (2026). Platform ini berevolusi dari chat app menjadi <b>ekosistem bisnis utama</b> — layanan pelanggan, pemasaran, dan penjualan — terutama sejak Meta mendorong WhatsApp Business API dengan aturan baru 2026 (BSUID, username, batasan AI pihak ketiga)."))
S.append(b("Laporan ini merangkum riset terhadap <b>13+ layanan WhatsApp Bot AI</b> tersedia di Indonesia, menilai dari <b>8 dimensi</b>: AI/chatbot, broadcast, shared inbox, integrasi, harga & transparansi, kemudahan, dukungan, dan ulasan pengguna."))
S.append(sp(6)); S.append(b("<b>Temuan Utama:</b>"))
S.append(bul("<b>Chakra Chat</b> — termurah ($12.49/bln, ~Rp195rb), coexistence unik (nomor sama HP+API), tidak ada markup Meta."))
S.append(bul("<b>Wati</b> — paling populer untuk UKM, tapi <b>biaya tersembunyi bisa 5x lipat</b> dari harga iklan (markup Meta + per-message + per-seat)."))
S.append(bul("<b>Qiscus (Robolabs) & Mekari Qontak</b> — AI agent paling canggih untuk enterprise, harga Rp2-5jt+/bln."))
S.append(bul("<b>Aisensy</b> unggul marketing broadcast, <b>Kommo</b> unggul CRM sales pipeline, <b>Maxchat</b> omnichannel solid lokal."))
S.append(bul("Mayoritas keluhan: <b>biaya tersembunyi, support lambat, AI masih kaku, setup teknis rumit</b>."))
S.append(PageBreak())

# ─── 2. METHODOLOGY ───
S.append(h1("2. Metodologi Riset")); S.append(hr())
S.append(b("Riset: 26 Juni 2026. Sumber: situs resmi provider, Trustpilot, G2, GetApp, SoftwareSuggest, Hack'celeration, ChakraHQ, Respond.io, Fuzen, Flowcart, TodayTesting, Blocksentient, Reddit r/indonesia, forum komunitas AI Indonesia."))
S.append(b("<b>8 Dimensi Penilaian:</b>"))
for d in ["AI & Chatbot (NLP, LLM, AI agent, intent recognition)","Shared Team Inbox (multi-agent, routing, assignment)","Broadcast & Campaign (blast, segmentasi, template, CTWA ads)","Integrasi (e-commerce, CRM, API/webhook, multi-channel)","Harga & Transparansi (langganan, biaya Meta, markup, hidden fees)","Kemudahan (setup, UX, no-code, dokumentasi, mobile app)","Dukungan (support lokal, onboarding, SLA)","Ulasan Pengguna (rating, keluhan umum, sentimen komunitas)"]:
    S.append(bul(d))
S.append(PageBreak())

# ─── 3. PROVIDER LIST ───
S.append(h1("3. Daftar Provider WA Bot AI di Indonesia")); S.append(hr())
S.append(b("13 provider utama, diurutkan dari harga termurah:")); S.append(sp(6))
prov = [
    ["1","Chakra Chat","🇮🇩 Lokal","$12.49/bln (~Rp195rb)","UMKM–Menengah"],
    ["2","Opaper","🇮🇩 Lokal","~Rp500rb-1.5jt/bln","UMKM"],
    ["3","CklikWa / ClickWa","🇮🇩 Lokal","~Rp300rb-1jt/bln","UKM Kecil"],
    ["4","ChatnBoom","🇮🇩 Lokal","~Rp500rb+/bln","UKM"],
    ["5","ManyChat","🌍 Global","$15+/bln (contact)","UKM–Menengah"],
    ["6","Aisensy","🌍 Global","$45–99/bln","Marketing–Menengah"],
    ["7","Wati","🌍 Global","$49–299/bln","UKM–Menengah"],
    ["8","Maxchat","🇮🇩 Lokal","Rp850rb–2.5jt/bln","Menengah–Besar"],
    ["9","Respond.io","🌍 Global","$79+/bln","Menengah"],
    ["10","Interakt","🌍 Global","₹3.499/qtr (~$42)","UMKM–Menengah"],
    ["11","Gallabox","🌍 Global","$89+/bln","Menengah–Besar"],
    ["12","Qiscus (Robolabs)","🇮🇩 Lokal","$115–270/bln","Enterprise"],
    ["13","Mekari Qontak","🇮🇩 Lokal","Rp2-5jt/bln","Enterprise"],
]
S.append(tbl(["#","Provider","Asal","Harga Mulai","Target Pasar"], prov, [0.6*cm,3.8*cm,2*cm,4*cm,3.5*cm]))
S.append(PageBreak())

# ─── 4. MAIN COMPARISON ───
S.append(h1("4. Tabel Perbandingan Utama (8 Dimensi)")); S.append(hr())
S.append(b("★ = Sangat Baik hingga Buruk. Coexistence = bisa pakai nomor sama di HP + API.")); S.append(sp(6))
ch = ["Provider","AI\nChatbot","Broad-\ncast","Shared\nInbox","Coexis-\ntence","Mobile\nApp","Support\nLokal","Transpa-\nransi","Nilai"]
cr = [
    ["Chakra Chat", "★★★★","★★★★","★★★★","UNIK","★★★","★★★★★","★★★★★","4.5"],
    ["Opaper",      "★★",  "★★★", "★★★", "—",   "★★", "★★★★★","★★",   "3.5"],
    ["CklikWa",     "★",   "★★★", "★★★", "—",   "—",  "★★★★", "★★★",  "3.2"],
    ["ChatnBoom",   "★★",  "★★★", "★★★", "—",   "—",  "★★★★", "★★★",  "3.0"],
    ["ManyChat",    "★★★", "★★★★","★★★★","—",   "★★★","★★",   "★★★",  "3.8"],
    ["Aisensy",     "★★★★","★★★★★","★★★★","—",  "★★★","★★",   "★★★",  "4.0"],
    ["Wati",        "★★★★","★★★★","★★★★★","—",  "★★★","★★",   "★★",   "3.6"],
    ["Maxchat",     "★★★★","★★★★","★★★★★","★★", "★★★","★★★★★","★★★★", "4.2"],
    ["Respond.io",  "★★★★★","★★★★","★★★★★","★★","★★★","★★★",  "★★★★", "4.3"],
    ["Interakt",    "★★★★","★★★★","★★★★", "—",   "★★★","★★",   "★★★",  "3.9"],
    ["Gallabox",    "★★★★","★★★★","★★★★★","—",  "★★★","★★",   "★★★★", "4.0"],
    ["Qiscus",      "★★★★★","★★★★","★★★★★","★★","★★★","★★★★★","★★★",  "4.2"],
    ["Mekari Qontak","★★★★★","★★★★★","★★★★★","—","★★★","★★★★★","★",    "3.8"],
]
S.append(tbl(ch, cr, [2.2*cm,1.5*cm,1.5*cm,1.5*cm,1.5*cm,1.5*cm,1.8*cm,1.5*cm,1.2*cm]))
S.append(sp(4)); S.append(Paragraph("<i>Transparansi ★ = harus hubungi sales (harga tidak jelas). Rating Wati turun karena Trustpilot ~3.6 (biaya tersembunyi).</i>", sSm))
S.append(PageBreak())

# ─── 5. PROFILES ───
S.append(h1("5. Profil Detail Masing-Masing Provider")); S.append(hr())

# 5.1 Chakra Chat
S.extend(profile(
    "5.1 Chakra Chat — Lokal, Termurah, Coexistence Unik",
    "chakrahq.com", "Indonesia", "$12.49/bln (~Rp195rb)", "UMKM–Menengah",
    ["WhatsApp API resmi (Mitra Meta) — shared team inbox lengkap",
     "<b>WhatsApp Coexistence UNIK:</b> pakai nomor WA sama di HP & dashboard API bersamaan, tanpa migrasi",
     "AI Agent + Chatbot dengan NLU (natural language understanding)",
     "Lead management & sales pipeline built-in",
     "Broadcast messaging + workflow campaigns",
     "Integrasi Shopify & e-commerce, API/webhook",
     "Mobile app (iOS & Android)",
     "<b>Tidak ada markup</b> biaya template Meta → hemat 20-25%"],
    ["Harga paling terjangkau ($12.49/bln) — semua fitur unlocked",
     "Coexistence: tidak perlu nomor baru, setup simpel",
     "Support bahasa Indonesia aktif",
     "Biaya transparan — tidak ada hidden markup Meta"],
    ["Fitur AI dan integrasi e-commerce masih dalam pengembangan",
     "Brand awareness kalah dari Wati/Qiscus",
     "Review independen masih sedikit (relatif baru)"],
    None,
    "Startup, UKM kecil-menengah, bisnis yang ingin upgrade ke WA API tanpa biaya besar dan tanpa repot migrasi nomor."
))

# 5.2 Wati
S.extend(profile(
    "5.2 Wati — Global Populer, Fitur Matang, Biaya Perlu Dicermati",
    "wati.io", "India (populer di Indonesia)", "$49-299/bln (annual)", "UKM–Menengah (3-50 agent)",
    ["Official Meta BSP — verifikasi nomor & approval template otomatis",
     "Shared team inbox terbersih di kelasnya (review Hack'celeration 2026)",
     "No-code chatbot builder — hingga 200 langkah otomasi",
     "Broadcast campaigns + Click-to-WhatsApp Ads analytics",
     "Multi-agent support, routing, assignment",
     "AI-assisted template approval (fitur baru 2026)",
     "Integrasi Instagram (baru)"],
    ["UI/UX sangat rapi — onboarding mulus untuk tim",
     "Chatbot builder powerful untuk FAQ & otomasi support rutin",
     "Ekosistem integrasi luas (Zapier, Shopify, HubSpot, dll)"],
    ["⚠️ Markup ~20% di atas biaya Meta → tagihan riil bisa <b>5x lipat</b> harga iklan",
     "Biaya per-user tambahan, per-seat, trigger top-up ~$40/1000 msg",
     "Trustpilot ~3.6 — keluhan post-cancellation charges, no-refund policy",
     "Fitur AI advanced hanya di Pro/Business",
     "Tidak ada native mobile app (web/desktop only)",
     "Customer support lambat — banyak dikeluhkan"],
    "Hack'celeration 2026: 'Buy it with the real cost in front of you, not the headline.' Tim menengah di paket Pro bisa ~$500/bln total.",
    "UKM menengah (3-50 agent) yang butuh WA API rapi dan siap dengan total biaya riil."
))

# 5.3 Qiscus
S.extend(profile(
    "5.3 Qiscus (Robolabs) — Enterprise Indonesia, AI Agent Paling Matang",
    "qiscus.com", "Indonesia (Yogyakarta)", "$115-270/bln + Enterprise custom", "Enterprise, Perusahaan Besar",
    ["<b>Robolabs AI:</b> LLM-powered agent — paham intent, respons natural, brand tone custom",
     "Omnichannel: WA, IG, FB, live chat, marketplace dalam satu platform",
     "SDK developer-friendly — embed chat di app sendiri",
     "Analitik performa AI agent + dashboard komprehensif",
     "Integrasi CRM/ERP/existing systems via API",
     "Scheduling broadcast, template management"],
    ["AI agent paling matang di antara provider lokal Indonesia",
     "Support lokal kuat dengan kantor fisik di Indonesia",
     "Sangat cocok untuk volume chat tinggi (enterprise scale)",
     "Reputasi baik di kalangan korporasi Indonesia"],
    ["Harga tinggi — tidak untuk UKM kecil",
     "Kurva belajar curam untuk setup penuh",
     "Biaya tambahan untuk fitur AI advanced",
     "Coexistence terbatas — mungkin perlu nomor dedicated"],
    None,
    "E-commerce besar, perusahaan menengah-besar, tim CS 10+ orang yang butuh AI agent canggih."
))

# 5.4 Mekari Qontak
S.extend(profile(
    "5.4 Mekari Qontak — Omnichannel CRM + Agentic AI, All-in-One",
    "qontak.com", "Indonesia (Mekari Group)", "Rp2-5jt/bln (hubungi sales)", "Enterprise, Korporasi",
    ["<b>Agentic AI:</b> AI bisa ambil tindakan (bukan sekadar chat) — klaim closing deal 30 detik",
     "Omnichannel CRM: WA, IG, email, web chat, telepon — satu dashboard",
     "Sales pipeline CRM + manajemen deal + ticketing + SLA",
     "Broadcast resmi + template message",
     "ISO 27001 + Komdigi + Meta Business Partner certified",
     "Integrasi ekosistem Mekari (Talenta, Jurnal, dll)",
     "Dashboard analitik real-time + KPI monitoring"],
    ["All-in-one: CRM + omnichannel + AI agent dalam satu platform",
     "Keamanan enterprise (ISO 27001, NDA)",
     "Ekosistem Mekari terintegrasi penuh",
     "Support lokal dedicated enterprise"],
    ["Harga tidak transparan — harus hubungi sales",
     "Overkill untuk bisnis kecil — terlalu kompleks",
     "Tidak ada paket dasar — langsung enterprise",
     "Banyak fitur → perlu training serius"],
    None,
    "Korporasi besar, perusahaan yang sudah pakai ekosistem Mekari, tim sales & CS besar."
))

S.append(PageBreak())

# 5.5 Maxchat
S.extend(profile(
    "5.5 Maxchat — Omnichannel Lokal Andal, ISO 27001",
    "maxchat.id", "Indonesia (sejak 2020)", "Pro Rp850rb/bln, Business Rp2.5jt/bln", "Menengah–Besar",
    ["Omnichannel: WA, IG, FB, live chat, Telegram — satu dashboard",
     "Maxchat AI: Chatbot AI + responder otomatis",
     "Shared inbox dengan routing agen otomatis & assignment",
     "Broadcast WhatsApp + kalkulator biaya otomatis",
     "Ticketing system + SLA management",
     "Integrasi API & webhook",
     "ISO 27001 certified + NDA",
     "Dukungan WhatsApp Group"],
    ["Omnichannel kuat — semua channel dalam satu tempat",
     "Harga Rupiah — tidak ada fluktuasi kurs",
     "Support lokal Indonesia responsif",
     "Keamanan enterprise (ISO 27001)"],
    ["Harga lebih tinggi untuk paket menengah (Rp850rb)",
     "Fitur AI kurang mendalam vs Qiscus/Qontak",
     "Tidak sefleksibel Chakra Chat untuk UKM kecil"],
    None,
    "Bisnis menengah Indonesia yang butuh omnichannel solid, support lokal, dan keamanan terjamin."
))

# 5.6 Aisensy
S.extend(profile(
    "5.6 Aisensy — Jagoan Marketing & Broadcast Massal",
    "aisensy.com", "India (CTX Growth Champion 2025)", "$45/bln Basic, $99/bln Pro", "Marketing–Menengah",
    ["Broadcast massal WhatsApp resmi — kapasitas besar",
     "Chatbot no-code + AI responses",
     "Multi-agent live chat support",
     "Click-to-WhatsApp Ads management built-in",
     "Segmentasi pelanggan & campaign analytics",
     "WhatsApp Catalog & Payment integration",
     "Forms & surveys dalam WhatsApp"],
    ["Platform marketing WA paling kuat — broadcast & CTWA unggul",
     "Harga kompetitif untuk fitur broadcast",
     "CTWA Ads langsung dari dashboard",
     "Pembaruan fitur cepat (blazing fast)"],
    ["Fitur sales pipeline kurang kuat",
     "Support bahasa Indonesia terbatas",
     "Fokus marketing — kurang cocok untuk full CS operation",
     "Biaya template Meta tetap berlaku di atas langganan"],
    None,
    "Bisnis yang fokus WhatsApp marketing, broadcast campaign, lead generation — bukan full CS."
))

# 5.7 Kommo
S.extend(profile(
    "5.7 Kommo — CRM Messenger Berbasis AI untuk Sales",
    "kommo.com", "Global (populer di Indonesia)", "$25+/user/bln (AI add-on terpisah)", "Sales Team–Menengah",
    ["Messenger-based CRM: WA, IG, Telegram, Messenger, TikTok",
     "AI Agent: AI teammate — jawab lead, rekomendasi produk, kumpulkan data",
     "Sales pipeline CRM dengan deal stages",
     "WhatsApp Chatbot untuk kualifikasi lead otomatis",
     "Banyak integrasi tools sales & marketing",
     "Mobile app lengkap"],
    ["Pendekatan unik: CRM + messenger — fokus closing deal",
     "AI agent bisa handle chat seperti sales person",
     "Cocok untuk tim sales aktif di WA/IG"],
    ["AI Agent add-on berbayar terpisah (~$25-50/bln tambahan)",
     "Broadcast locked di paket Advanced",
     "Billing per-user — mahal untuk tim besar",
     "Tidak ada message scheduler built-in",
     "Tidak ada email marketing / abandoned cart recovery"],
    None,
    "Tim sales yang aktif menjual via WA/IG dan butuh CRM terintegrasi chat."
))

S.append(PageBreak())

# 5.8 Respond.io
S.extend(profile(
    "5.8 Respond.io — Manajemen Percakapan Modern, Transparan",
    "respond.io", "Global (Hong Kong)", "$79+/bulan (Growth)", "Menengah–Enterprise",
    ["Omnichannel inbox: WA, IG, FB, Telegram, WeChat, Line, email",
     "AI Agent untuk jawab otomatis & smart routing",
     "Workflow automation builder",
     "Broadcast & campaign management",
     "Analitik & reporting lengkap",
     "Integrasi CRM & helpdesk"],
    ["Sangat transparan pricing — batas conversation jelas",
     "Omnichannel terluas (sampai WeChat & Line)",
     "AI Agent canggih",
     "UI modern dan bersih"],
    ["Harga mulai lebih tinggi ($79/bln)",
     "Conversation limit ketat: 100 chatbot + 50 AI untuk Growth plan",
     "Support Indonesia tidak dedicated"],
    None,
    "Bisnis menengah ke atas yang butuh omnichannel luas dengan transparansi biaya."
))

# 5.9 ManyChat
S.extend(profile(
    "5.9 ManyChat — Otomasi Multi-Channel, Contact-Based Pricing",
    "manychat.com", "Global", "$15+/bln (500 contacts)", "UKM–Marketing Automation",
    ["Drag-and-drop flow builder — visual & powerful",
     "Multi-channel: WA, IG, FB Messenger, SMS, email",
     "Keyword triggers & auto-replies",
     "QR codes untuk lead capture",
     "Analytics & A/B testing",
     "Banyak template siap pakai"],
    ["Flow builder visual terbaik di kelasnya",
     "Multi-channel automation kuat",
     "Harga entry murah untuk contact list kecil",
     "Banyak template siap pakai"],
    ["Contact-based pricing — makin besar list makin mahal (bisa $8000+/bln)",
     "Biaya tambahan per message WA",
     "Fokus marketing — kurang untuk full CS",
     "Support bahasa Indonesia minimal"],
    None,
    "UKM yang fokus WA/IG marketing automation dengan contact list tidak terlalu besar."
))

# 5.10 Interakt
S.extend(profile(
    "5.10 Interakt — Milik Jio Haptik (Reliance), AI Enterprise Backing",
    "interakt.com", "India (Jio Haptik/Reliance)", "Starter ₹3.499/qtr, Growth ₹7.699/qtr, Enterprise custom", "UMKM–Enterprise",
    ["WhatsApp + Instagram channel dalam satu platform",
     "Chatbot builder (linear → branching + API di Advanced)",
     "Broadcast campaigns & bulk messaging",
     "Shared team inbox",
     "Haptik AI enterprise-grade backing",
     "Unlimited agents di paket Growth+"],
    ["Backing enterprise AI dari Haptik (Reliance Industries)",
     "Harga kompetitif untuk pasar India/Asia",
     "Multi-channel WA + IG",
     "Unlimited agents"],
    ["Chatbot terbatas linear di paket dasar — branching hanya di Advanced",
     "Fitur marketing kurang kuat vs Aisensy",
     "Support Indonesia tidak dedicated"],
    None,
    "Bisnis menengah yang butuh WA+IG automation dengan AI enterprise dan harga ok."
))

# 5.11 Gallabox
S.extend(profile(
    "5.11 Gallabox — Skalabilitas Tinggi, Cocok untuk Growing Business",
    "gallabox.com", "Global (India)", "$89+/bln (6 users)", "Menengah–Besar",
    ["Omnichannel inbox: WA + channel lain",
     "AI Agent + automation workflows",
     "Team collaboration tools",
     "Broadcast & campaign management",
     "Integrasi CRM & tools bisnis",
     "Scalable architecture"],
    ["Skalabilitas baik untuk bisnis berkembang",
     "Harga jelas dan transparan",
     "Team collaboration tools bagus"],
    ["Harga lebih premium ($89/bln)",
     "Kurang cocok untuk UKM sangat kecil",
     "Support Indonesia minimal"],
    None,
    "Bisnis menengah yang sedang scale-up dan butuh platform yang tumbuh bersama."
))

# 5.12 Opaper
S.extend(profile(
    "5.12 Opaper — UMKM Lokal Simpel",
    "opaper.id", "Indonesia", "~Rp500rb-1.5jt/bln (hubungi sales)", "UMKM",
    ["Shared inbox, broadcast, chatbot dasar",
     "Analitik sederhana",
     "Support WhatsApp Business API"],
    ["Support lokal cepat",
     "Mudah di-setup untuk UMKM",
     "Fokus pada kebutuhan UMKM Indonesia"],
    ["Fitur AI terbatas",
     "Integrasi e-commerce minim",
     "Harga kurang transparan"],
    None,
    "UMKM kecil yang baru mulai otomasi WA dan butuh solusi simpel."
))

# 5.13 Others
S.append(h2("5.13 Provider Lainnya"))
S.append(b("Beberapa provider tambahan yang juga tersedia di Indonesia:"))
S.append(bul("<b>CklikWa / ClickWa:</b> Lokal, ~Rp300rb-1jt/bln, fokus broadcast & CS dasar, fitur AI terbatas."))
S.append(bul("<b>ChatnBoom:</b> Lokal, ~Rp500rb+/bln, user-friendly untuk tim kecil, fitur skalabilitas terbatas."))
S.append(bul("<b>Gupshup:</b> Global enterprise, API kuat & chatbot advanced, sangat skalabel, harga kompleks, UI kurang intuitif."))
S.append(bul("<b>360dialog:</b> Global (Jerman), Meta BSP resmi, fokus API access, harga transparan mulai €49/bln, fitur terbatas — lebih sebagai WhatsApp API gateway."))
S.append(bul("<b>SleekFlow:</b> Global (Hong Kong), omnichannel commerce, integrasi e-commerce kuat, harga ~$50+/bln."))
S.append(PageBreak())

# ─── 6. PRICING DETAIL ───
S.append(h1("6. Perbandingan Harga Detail")); S.append(hr())
S.append(b("Perhatian: Harga langganan BELUM termasuk biaya per-pesan dari Meta. Biaya Meta 2026: ~$0.005-0.09/pesan tergantung tipe (marketing/utility/service) dan negara penerima. Beberapa provider menambahkan markup."))
S.append(sp(6))
ph = ["Provider","Paket","Harga/Bulan","Biaya Meta","Markup\nProvider","Estimasi\nTotal/bulan*"]
pr_rows = [
    ["Chakra Chat","Basic","$12.49","Sesuai tagihan\nMeta langsung","TIDAK ADA","~$50-100"],
    ["Opaper","N/A","~Rp500rb-1.5jt","Termasuk?\n(konfirmasi)","Tidak jelas","~Rp800rb-2jt"],
    ["ManyChat","Pro","$15 (500 contacts)","Tambahan\nper message","Tidak","~$30-200"],
    ["Aisensy","Basic","$45","Tambahan","20-25%","~$80-200"],
    ["Aisensy","Pro","$99","Tambahan","20-25%","~$180-400"],
    ["Wati","Growth","$49","Tambahan","~20%","~$100-400"],
    ["Wati","Pro","$99","Tambahan","~20%","~$200-600"],
    ["Wati","Business","$299","Tambahan","~20%","~$500-1000"],
