from PIL import Image, ImageDraw, ImageFont, ImageFilter
import textwrap

W,H = 1200,630
SRC = "/Applications/MAMP/htdocs/neurobiologia-redesign/assets/video/brain-poster.webp"
OUT = "/Applications/MAMP/htdocs/neurobiologia-redesign/assets/og"
GREEN = (19,98,65)
IVORY = (246,244,240)

F_SB = "Poppins-SemiBold.ttf"
F_R  = "Poppins-Regular.ttf"
F_M  = "Poppins-Medium.ttf"

def bg():
    im = Image.open(SRC).convert("RGB")
    # cover-crop to 1200x630
    s = max(W/im.width, H/im.height)
    im = im.resize((int(im.width*s), int(im.height*s)), Image.LANCZOS)
    x = (im.width-W)//2; y=(im.height-H)//2
    im = im.crop((x,y,x+W,y+H))
    # darken overall
    dark = Image.new("RGB",(W,H),(5,6,10))
    im = Image.blend(im, dark, 0.62)
    # left-to-right scrim for text legibility
    grad = Image.new("L",(W,1))
    for i in range(W):
        t = i/W
        grad.putpixel((i,0), int(235*(1-t)**1.4))
    grad = grad.resize((W,H))
    black = Image.new("RGB",(W,H),(3,4,8))
    im = Image.composite(black, im, grad)
    return im

def draw_card(headline, kicker, fname):
    im = bg()
    d = ImageDraw.Draw(im)
    PAD = 80
    # kicker
    fk = ImageFont.truetype(F_M, 26)
    kick = kicker.upper()
    # letterspacing
    x = PAD; ky = 92
    for ch in kick:
        d.text((x,ky), ch, font=fk, fill=(255,255,255,230))
        x += d.textlength(ch, font=fk) + 3
    # green rule
    d.rectangle([PAD, ky+50, PAD+66, ky+56], fill=GREEN if False else (43,160,110))
    # headline
    size = 74
    while size > 40:
        fh = ImageFont.truetype(F_SB, size)
        lines = _wrap(d, headline, fh, W-2*PAD)
        lh = size*1.12
        if len(lines)*lh <= 300:
            break
        size -= 4
    fh = ImageFont.truetype(F_SB, size)
    lines = _wrap(d, headline, fh, W-2*PAD)
    lh = size*1.14
    total = len(lines)*lh
    ty = ky+90
    for ln in lines:
        d.text((PAD, ty), ln, font=fh, fill=(255,255,255))
        ty += lh
    # bottom-left brand mark line
    fb = ImageFont.truetype(F_M, 24)
    d.ellipse([PAD, H-64, PAD+12, H-52], fill=(43,160,110))
    d.text((PAD+24, H-70), "neurostrategia.pl", font=fb, fill=(255,255,255,215))
    im.save(f"{OUT}/{fname}", quality=88)
    print("wrote", fname, im.size)

def _wrap(d, text, font, maxw):
    words = text.split()
    lines=[]; cur=""
    for w in words:
        t=(cur+" "+w).strip()
        if d.textlength(t, font=font) <= maxw:
            cur=t
        else:
            if cur: lines.append(cur)
            cur=w
    if cur: lines.append(cur)
    return lines

draw_card("Psychologia decyzji dla marketingu i sprzedaży",
          "Neurostrategia · Daria Widerowska", "og-home.jpg")
draw_card("Neuromarketing i psychologia decyzji w praktyce biznesowej",
          "Neurostrategia · Oferta", "og-oferta.jpg")
draw_card("Audyt decyzji zakupowych w sprzedaży i marketingu",
          "Neurostrategia · Audyt", "og-audyt.jpg")
