"""
Cover image generator — «Из тысяч AI-агентов настоящих около 130»
Brandbook: Бумага / Тушь / Реактив / Пыль. 1200×675px.
"""

from PIL import Image, ImageDraw, ImageFont
import os

FONTS = "/workspace/canvas-fonts"

PAPER = (244, 241, 234)
INK   = (14, 14, 14)
BLUE  = (42, 111, 219)
DUST  = (200, 194, 182)

W, H = 1200, 675

def fnt(name, size):
    return ImageFont.truetype(os.path.join(FONTS, name), size)

img  = Image.new("RGB", (W, H), PAPER)
draw = ImageDraw.Draw(img)

# ─── 1. Background carpet of "AI-агент" tags
tag_font = fnt("JetBrainsMono-Regular.ttf", 12)
tag_text = "AI-агент"
bb = draw.textbbox((0, 0), tag_text, font=tag_font)
tw = bb[2] - bb[0]
th = bb[3] - bb[1]
COL_GAP = tw + 26
ROW_GAP = th + 16

for row in range(-1, H // ROW_GAP + 2):
    offset = (tw // 2 + 13) if row % 2 else 0
    for col in range(-1, W // COL_GAP + 2):
        x = col * COL_GAP + offset
        y = row * ROW_GAP
        draw.text((x, y), tag_text, font=tag_font, fill=DUST)

# ─── 2. Typography
num_font    = fnt("JetBrainsMono-Bold.ttf",     200)
kicker_font = fnt("JetBrainsMono-Regular.ttf",   13)
sub_font    = fnt("BricolageGrotesque-Bold.ttf",  29)
logo_font   = fnt("WorkSans-Bold.ttf",            19)
handle_font = fnt("WorkSans-Regular.ttf",         11)

num_text    = "≈130"
kicker_text = "Gartner, 2025  ·  из тысяч заявленных"
sub_text    = "настоящих AI-агентов"

nb = draw.textbbox((0, 0), num_text,    font=num_font)
kb = draw.textbbox((0, 0), kicker_text, font=kicker_font)
sb = draw.textbbox((0, 0), sub_text,    font=sub_font)

nw, nh = nb[2] - nb[0], nb[3] - nb[1]
kh = kb[3] - kb[1]
kw = kb[2] - kb[0]
sw = sb[2] - sb[0]
sh = sb[3] - sb[1]

GAP1 = 10
GAP2 = 14

block_h   = kh + GAP1 + nh + GAP2 + sh
block_top = (H - block_h) // 2
cx = W // 2

# ─── 3. Draw kicker
draw.text((cx - kw // 2, block_top), kicker_text, font=kicker_font, fill=DUST)

# ─── 4. Draw main number
num_y = block_top + kh + GAP1
draw.text((cx - nw // 2 - nb[0], num_y - nb[1]), num_text, font=num_font, fill=BLUE)

# ─── 5. Draw subtitle
sub_y = num_y + nh + GAP2
draw.text((cx - sw // 2, sub_y), sub_text, font=sub_font, fill=INK)

# ─── 6. Logo «сафронов.» bottom-right
logo_word = "сафронов"
lw_bb = draw.textbbox((0, 0), logo_word, font=logo_font)
lw = lw_bb[2] - lw_bb[0]
lh = lw_bb[3] - lw_bb[1]
dot_bb = draw.textbbox((0, 0), ".", font=logo_font)
dw = dot_bb[2] - dot_bb[0]
h_bb = draw.textbbox((0, 0), "@safronov_ads", font=handle_font)
hw = h_bb[2] - h_bb[0]
hh = h_bb[3] - h_bb[1]

logo_right  = W - 40
logo_bottom = H - 40
logo_x = logo_right - lw - dw
logo_y = logo_bottom - lh - 8 - hh

draw.text((logo_x, logo_y), logo_word, font=logo_font, fill=INK)
draw.text((logo_x + lw, logo_y), ".", font=logo_font, fill=BLUE)
draw.text((logo_right - hw, logo_y + lh + 8), "@safronov_ads", font=handle_font, fill=DUST)

# ─── 7. Save
out = "/workspace/cover_agent_washing.png"
img.save(out, "PNG")
print(f"OK → {out}  {W}x{H}px")
