#!/usr/bin/env python3
"""Buat image FB DAS Bengkel Indonesia 10 Sep 2026 — Servis Rutin Mobil Alphard
1080x1350, bg #1a1a2e, teks putih, aksen orange #f97316 (pola gen_das_fb_20260908.py)
Artikel: https://dasindonesia.com/servis-rutin-mobil-alphard-jadwal-lengkap-komponen-yang-dicek-dan-tips-dari-teknisi
"""
from PIL import Image, ImageDraw, ImageFont
import os

W, H = 1080, 1350
BG = (26, 26, 46)        # #1a1a2e
TXT = (255, 255, 255)
ORANGE = (249, 115, 22)  # #f97316
MUTED = (200, 200, 210)

FONT_PATHS = [
    "/home/mantapman/.fonts/Poppins-Bold.ttf",
    "/home/mantapman/.fonts/Poppins-SemiBold.ttf",
    "/home/mantapman/.fonts/Poppins-Regular.ttf",
    "/home/mantapman/.fonts/poppins/Poppins-Bold.ttf",
    "/home/mantapman/.fonts/poppins/Poppins-Regular.ttf",
    "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf",
    "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
]


def font(sz, bold=True, regular=False):
    for p in FONT_PATHS:
        if ("Bold" in p) == bold or (regular and "Regular" in p):
            if os.path.exists(p):
                try:
                    return ImageFont.truetype(p, sz)
                except Exception:
                    continue
    return ImageFont.load_default()


def fit_font(text, max_w, start=74, bold=True):
    """Turunkan ukuran font sampai teks muat dalam max_w."""
    sz = start
    while sz > 40:
        f = font(sz, bold)
        if f.getlength(text) <= max_w:
            return f, sz
        sz -= 2
    return font(40, bold), 40


def draw_check(d, x, cy, size, fill):
    """Centang vektor (anti-tofu)."""
    s = size
    p1 = (x, cy + s * 0.52)
    p2 = (x + s * 0.32, cy + s * 0.92)
    p3 = (x + s, cy + s * 0.08)
    d.line([p1, p2, p3], fill=fill, width=max(5, int(s * 0.16)), joint="curve")


img = Image.new("RGB", (W, H), BG)
d = ImageDraw.Draw(img)

SZ = 65
MAXW = W - 2 * SZ  # 950

# ── Header ──
d.text((SZ, SZ), "DAS BENGKEL INDONESIA", font=font(34, True), fill=ORANGE)
d.text((W - SZ, SZ), "OTOMOTIF", font=font(30, True), fill=TXT, anchor="ra")
d.line([(SZ, SZ + 70), (W - SZ, SZ + 70)], fill=ORANGE, width=4)

# ── Title (auto-fit, maks 2 baris) ──
t1 = "SERVIS RUTIN ALPHARD"
t2 = "BUKAN CUMA GANTI OLI"
f1, s1 = fit_font(t1, MAXW, 78)
f2, s2 = fit_font(t2, MAXW, 78)
tsz = min(s1, s2)
ftitle = font(tsz, True)
LH = int(tsz * 1.22)
TITLE_Y = 190
d.text((SZ, TITLE_Y), t1, font=ftitle, fill=TXT)
d.text((SZ, TITLE_Y + LH), t2, font=ftitle, fill=TXT)

# ── Subtitle ──
sub_y = TITLE_Y + 2 * LH + 40
d.text((SZ, sub_y), "5 komponen yang wajib dicek sesuai jadwal", font=font(36, True), fill=ORANGE)

# ── Divider ──
div_y = sub_y + 72
d.line([(SZ, div_y), (SZ + 180, div_y)], fill=ORANGE, width=5)

# ── Bullets (5 item) ──
bullets = [
    ("Oli mesin & filter oli", "Viskositas sesuai spesifikasi Alphard"),
    ("Coolant & sistem pendingin", "Cek radiator, selang, dan tutup radiator"),
    ("Rem: kampas, cakram, minyak", "Keselamatan pertama, jangan tunggu berdecit"),
    ("Filter udara & filter kabin", "Mesin bernapas lega, kabin tetap segar"),
    ("Tekanan & rotasi ban", "Deteksi keausan tidak rata sejak dini"),
]
step = 132
y = div_y + 48
for t, s_ in bullets:
    draw_check(d, SZ + 2, y + 4, 32, ORANGE)
    d.text((SZ + 58, y), t, font=font(34, True), fill=TXT)
    d.text((SZ + 58, y + 48), s_, font=font(25, False), fill=MUTED)
    y += step

# ── Footer ──
d.line([(SZ, H - 120), (W - SZ, H - 120)], fill=(70, 70, 100), width=3)
d.text((SZ, H - 98), "www.dasindonesia.com", font=font(30, True), fill=ORANGE)
d.text((W - SZ, H - 98), "jadwal lengkap ada di artikel", font=font(28, True), fill=TXT, anchor="ra")

img.save("das_fb_20260910.png")
print("saved das_fb_20260910.png")

# ── Sanity check lebar teks (maks aman 950px) ──
checks = [
    ("title L1", ftitle, t1),
    ("title L2", ftitle, t2),
    ("subtitle", font(36, True), "5 komponen yang wajib dicek sesuai jadwal"),
    ("footer kiri", font(30, True), "www.dasindonesia.com"),
    ("footer kanan", font(28, True), "jadwal lengkap ada di artikel"),
]
worst = 0
for t, s_ in bullets:
    checks.append(("label: " + t, font(34, True), t))
    checks.append(("sub: " + s_[:18], font(25, False), s_))
for name, f, txt in checks:
    wd = f.getlength(txt)
    worst = max(worst, wd)
    flag = "OK " if wd <= MAXW else "OVERFLOW!"
    print(f"  [{flag}] {name}: {wd:.0f}px")
print("max width:", round(worst), "limit:", MAXW)
im = Image.open("das_fb_20260910.png")
print("size:", im.size, "mode:", im.mode)
print("last bullet bottom:", y - step + 48 + 32)
