#!/usr/bin/env python3
"""Generate PDF Business Insight Report — Social Media + Website (Agustus 2026)."""
import json
from fpdf import FPDF

# ── Data ──
with open("insight_data.json") as f:
    DATA = json.load(f)
with open("insight_website.json") as f:
    WEBS = json.load(f)

FONT = "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
FONT_B = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"

class PDF(FPDF):
    def header(self):
        self.set_font("DejaVu", "B", 9)
        self.set_text_color(100, 100, 100)
        self.cell(0, 6, "Business Insight Report - Social Media & Website", ln=True, align="R")
        self.ln(2)
    def footer(self):
        self.set_y(-15)
        self.set_font("DejaVu", "", 8)
        self.set_text_color(130, 130, 130)
        self.cell(0, 10, f"Halaman {self.page_no()}", align="C")

pdf = PDF()
pdf.add_font("DejaVu", "", FONT)
pdf.add_font("DejaVu", "B", FONT_B)
pdf.set_auto_page_break(auto=True, margin=18)

# ═══════ COVER ═══════
pdf.add_page()
pdf.ln(30)
pdf.set_font("DejaVu", "B", 26)
pdf.set_text_color(31, 64, 175)
pdf.cell(0, 14, "BUSINESS INSIGHT", ln=True, align="C")
pdf.set_font("DejaVu", "B", 18)
pdf.cell(0, 10, "REPORT", ln=True, align="C")
pdf.ln(8)
pdf.set_font("DejaVu", "", 13)
pdf.set_text_color(80, 80, 80)
pdf.cell(0, 8, "Social Media & Website Performance", ln=True, align="C")
pdf.cell(0, 8, "Semua Brand - StudioSoft Group", ln=True, align="C")
pdf.ln(12)
pdf.set_draw_color(31, 64, 175)
pdf.set_line_width(0.8)
pdf.line(60, pdf.get_y(), 150, pdf.get_y())
pdf.ln(12)
pdf.set_font("DejaVu", "", 11)
pdf.set_text_color(60, 60, 60)
pdf.cell(0, 7, f"Tanggal Laporan: {DATA['generated']}", ln=True, align="C")
pdf.cell(0, 7, "Periode Data: Juni - Agustus 2026", ln=True, align="C")
pdf.ln(25)
pdf.set_font("DejaVu", "", 10)
pdf.set_text_color(120, 120, 120)
pdf.cell(0, 6, "Disusun oleh Atun (AI Assistant)", ln=True, align="C")
pdf.cell(0, 6, "Sumber: Repliz API + WordPress REST API", ln=True, align="C")

# ═══════ RINGKASAN EKSEKUTIF ═══════
pdf.add_page()
pdf.set_font("DejaVu", "B", 16)
pdf.set_text_color(31, 64, 175)
pdf.cell(0, 10, "1. Ringkasan Eksekutif", ln=True)
pdf.ln(3)
accs = DATA["accounts"]
total = sum(a["total"] for a in accs)
succ = sum(a["success"] for a in accs)
err = sum(a["error"] for a in accs)
fut = sum(a["future"] for a in accs)
platforms = {}
for a in accs:
    p = a["type"]
    platforms.setdefault(p, {"total": 0, "success": 0, "error": 0, "future": 0})
    platforms[p]["total"] += a["total"]
    platforms[p]["success"] += a["success"]
    platforms[p]["error"] += a["error"]
    platforms[p]["future"] += a["future"]

pdf.set_font("DejaVu", "", 11)
pdf.set_text_color(40, 40, 40)
rows = [
    ("Total Akun Terhubung", f"{len(accs)} akun"),
    ("Total Postingan Tercatat", f"{total} post"),
    ("Postingan Sukses", f"{succ} ({100*succ//max(total,1)}%)"),
    ("Postingan Error", f"{err} ({100*err//max(total,1)}%)"),
    ("Jadwal Akan Datang", f"{fut} post"),
    ("Total Artikel Website", f"{sum(int(v or 0) for v in WEBS.values())} artikel"),
]
pdf.set_fill_color(240, 244, 255)
for label, val in rows:
    pdf.set_font("DejaVu", "", 11)
    pdf.set_text_color(40, 40, 40)
    pdf.cell(80, 9, label, fill=True)
    pdf.set_font("DejaVu", "B", 11)
    pdf.cell(0, 9, val, ln=True, fill=True)
pdf.ln(6)
pdf.set_font("DejaVu", "B", 12)
pdf.set_text_color(31, 64, 175)
pdf.cell(0, 8, "Ringkasan per Platform", ln=True)
pdf.ln(2)
pdf.set_font("DejaVu", "B", 10)
pdf.set_fill_color(31, 64, 175)
pdf.set_text_color(255, 255, 255)
pdf.cell(40, 8, "Platform", fill=True)
pdf.cell(25, 8, "Akun", fill=True)
pdf.cell(30, 8, "Total", fill=True)
pdf.cell(30, 8, "Sukses", fill=True)
pdf.cell(30, 8, "Error", fill=True)
pdf.cell(30, 8, "Akan Datang", fill=True, ln=True)
pdf.set_font("DejaVu", "", 10)
for p, s in sorted(platforms.items(), key=lambda x: -x[1]["total"]):
    pdf.set_fill_color(245, 245, 245)
    pdf.set_text_color(30, 30, 30)
    pname = {"threads": "Threads", "facebook": "Facebook", "linkedin": "LinkedIn", "instagram": "Instagram"}.get(p, p)
    pdf.cell(40, 8, pname, fill=True)
    n_acc = sum(1 for a in accs if a["type"] == p)
    pdf.cell(25, 8, str(n_acc), fill=True)
    pdf.cell(30, 8, str(s["total"]), fill=True)
    pdf.cell(30, 8, str(s["success"]), fill=True)
    pdf.cell(30, 8, str(s["error"]), fill=True)
    pdf.cell(30, 8, str(s["future"]), fill=True, ln=True)

# ═══════ DETAIL PER AKUN ═══════
pdf.add_page()
pdf.set_font("DejaVu", "B", 16)
pdf.set_text_color(31, 64, 175)
pdf.cell(0, 10, "2. Performa per Akun", ln=True)
pdf.ln(3)
pdf.set_font("DejaVu", "B", 9)
pdf.set_fill_color(31, 64, 175)
pdf.set_text_color(255, 255, 255)
pdf.cell(65, 8, "Akun", fill=True)
pdf.cell(25, 8, "Platform", fill=True)
pdf.cell(22, 8, "Total", fill=True)
pdf.cell(22, 8, "Sukses", fill=True)
pdf.cell(20, 8, "Error", fill=True)
pdf.cell(22, 8, "Terjadwal", fill=True)
pdf.cell(22, 8, "Status", fill=True, ln=True)
pdf.set_font("DejaVu", "", 9)
for i, a in enumerate(accs):
    if i % 2 == 0:
        pdf.set_fill_color(245, 248, 255)
    else:
        pdf.set_fill_color(255, 255, 255)
    pdf.set_text_color(30, 30, 30)
    pname = {"threads": "Threads", "facebook": "FB", "linkedin": "LinkedIn", "instagram": "IG"}.get(a["type"], a["type"])
    name = (a["name"] or a["username"])[:38]
    pdf.cell(65, 7, name, fill=True)
    pdf.cell(25, 7, pname, fill=True)
    pdf.cell(22, 7, str(a["total"]), fill=True)
    pdf.cell(22, 7, str(a["success"]), fill=True)
    pdf.cell(20, 7, str(a["error"]), fill=True)
    pdf.cell(22, 7, str(a["future"]), fill=True)
    status = "Aktif" if a["connected"] else "Putus"
    pdf.cell(22, 7, status, fill=True, ln=True)

# ═══════ WEBSITE ═══════
pdf.add_page()
pdf.set_font("DejaVu", "B", 16)
pdf.set_text_color(31, 64, 175)
pdf.cell(0, 10, "3. Performa Website (Konten)", ln=True)
pdf.ln(3)
pdf.set_font("DejaVu", "", 11)
pdf.set_text_color(60, 60, 60)
pdf.multi_cell(0, 7, "Jumlah artikel terpublikasi per website (data WordPress REST API, status 200 OK). Website adalah sumber konten utama yang dipasarkan melalui Threads, Facebook, dan LinkedIn.")
pdf.ln(4)
pdf.set_font("DejaVu", "B", 9)
pdf.set_fill_color(31, 64, 175)
pdf.set_text_color(255, 255, 255)
pdf.cell(110, 8, "Website", fill=True)
pdf.cell(40, 8, "Artikel", fill=True)
pdf.cell(40, 8, "Kontribusi", fill=True, ln=True)
pdf.set_font("DejaVu", "", 10)
webtotal = sum(int(v or 0) for v in WEBS.values()) or 1
brand_map = {
    "dasindonesia.com": "DAS Bengkel Indonesia",
    "studiosoft.id": "StudioSoft",
    "leitsurabaya.com": "LEIT",
    "tslaw.id": "TS Law",
    "dmark.id": "DMark Creative",
    "theskincodeclinic.com": "The Skin Code Clinic",
    "surabaya-skincentre.com": "Surabaya Skin Centre",
    "yasmanatura.co.id": "Yasma Natura",
}
for i, (dom, count) in enumerate(sorted(WEBS.items(), key=lambda x: -int(x[1] or 0))):
    if i % 2 == 0:
        pdf.set_fill_color(245, 248, 255)
    else:
        pdf.set_fill_color(255, 255, 255)
    pdf.set_text_color(30, 30, 30)
    label = f"{brand_map.get(dom, dom)} ({dom})"
    c = int(count or 0)
    pdf.cell(110, 8, label[:52], fill=True)
    pdf.cell(40, 8, str(c), fill=True)
    pdf.cell(40, 8, f"{100*c//webtotal}%", fill=True, ln=True)

# ═══════ INSIGHT & REKOMENDASI ═══════
pdf.add_page()
pdf.set_font("DejaVu", "B", 16)
pdf.set_text_color(31, 64, 175)
pdf.cell(0, 10, "4. Insight & Rekomendasi", ln=True)
pdf.ln(3)
insights = [
    ("Kanal Terkuat", f"Platform dengan total posting tertinggi: {max(platforms.items(), key=lambda x: x[1]['total'])[0]} - perlu dipertahankan konsistensinya."),
    ("Error Rate", f"{100*err//max(total,1)}% postingan tercatat error. Mayoritas berasal dari periode 2 Juli (kendala teknis image base64). Saat ini image wajib URL + format JPEG/WebP."),
    ("Kapasitas Konten", f"Total {sum(int(v or 0) for v in WEBS.values())} artikel tersedia di seluruh website - stok konten melimpah untuk pemasaran 1-2 bulan ke depan."),
    ("Jadwal Full Agustus", f"{fut} postingan telah terjadwal untuk periode Agustus 2026 di seluruh platform - konten unik, tanpa redundansi."),
    ("Rekomendasi", "1) Pantau akun dengan error tinggi; 2) Lanjutkan rotasi artikel per brand; 3) Tambah akun yang belum terhubung (DMark Threads, EveryBe FB); 4) Optimasi balas komentar follower untuk engagement."),
]
pdf.set_font("DejaVu", "", 10.5)
pdf.set_text_color(40, 40, 40)
for title, body in insights:
    pdf.set_font("DejaVu", "B", 11)
    pdf.set_text_color(31, 64, 175)
    pdf.cell(0, 8, f"- {title}", ln=True)
    pdf.set_font("DejaVu", "", 10.5)
    pdf.set_text_color(50, 50, 50)
    pdf.multi_cell(0, 6.5, body)
    pdf.ln(3)
pdf.ln(8)
pdf.set_draw_color(31, 64, 175)
pdf.line(20, pdf.get_y(), 190, pdf.get_y())
pdf.ln(5)
pdf.set_font("DejaVu", "", 9)
pdf.set_text_color(120, 120, 120)
pdf.multi_cell(0, 6, "Catatan: Data diambil dari Repliz API (jadwal & status posting) dan WordPress REST API (jumlah artikel). Angka performa engagement (like/komen) belum tersedia via API Repliz.")

OUT = "business_insight_report_aug2026.pdf"
pdf.output(OUT)
print(f"✅ {OUT} dibuat ({len(pdf.pages)} halaman)")
