from PIL import Image, ImageDraw, ImageFont

W, H = 1200, 675
PAPER = (244, 241, 234); INK = (14, 14, 14); REAGENT = (42, 111, 219)
DUST = (200, 194, 182); STOP = (230, 51, 34)
CARD = (28, 28, 30); PAPER_DIM = (150, 148, 141)
BASE = "/workspace/vc_covers"
ONEST = BASE + "/fonts/Onest.ttf"
JBM = BASE + "/fonts/JetBrainsMono.ttf"


def onest(size, wght=400):
    f = ImageFont.truetype(ONEST, size)
    try:
        f.set_variation_by_axes([wght])
    except Exception:
        pass
    return f


def jbm(size):
    return ImageFont.truetype(JBM, size)


def tracked(d, xy, text, font, fill, track):
    x, y = xy
    for ch in text:
        d.text((x, y), ch, font=font, fill=fill)
        x += d.textlength(ch, font=font) + track
    return x


img = Image.new("RGB", (W, H), PAPER)
d = ImageDraw.Draw(img)
M = 64

bx = 760
d.rectangle([bx, 0, W, H], fill=INK)
cx0, cy0, cx1, cy1 = bx + 40, 132, W - 40, 543
d.rounded_rectangle([cx0, cy0, cx1, cy1], radius=16, fill=CARD)
d.text((cx0 + 30, cy0 + 26), "ПОСЛЕДНИЙ ШАНС", font=onest(19, 700), fill=STOP)
d.text((cx0 + 30, cy0 + 50), "04:59", font=jbm(56), fill=STOP)
d.text((cx0 + 30, cy0 + 130), "−70% только сейчас", font=onest(22, 500), fill=PAPER)
bxy0, bxy1 = cy0 + 180, cy0 + 240
d.rounded_rectangle([cx0 + 30, bxy0, cx1 - 30, bxy1], radius=12, fill=REAGENT)
bt = "ЗАБРАТЬ СКИДКУ"; bf = onest(26, 700)
tb = d.textbbox((0, 0), bt, font=bf)
d.text((cx0 + 30 + ((cx1 - cx0 - 60) - (tb[2] - tb[0])) / 2, bxy0 + 15), bt, font=bf, fill=PAPER)
d.text((cx0 + 30, bxy1 + 20), "нет, я люблю переплачивать", font=onest(17, 400), fill=PAPER_DIM)
chk_y = bxy1 + 58
d.rounded_rectangle([cx0 + 30, chk_y, cx0 + 52, chk_y + 22], radius=5, fill=REAGENT)
d.line([cx0 + 35, chk_y + 12, cx0 + 40, chk_y + 17], fill=PAPER, width=3)
d.line([cx0 + 40, chk_y + 17, cx0 + 48, chk_y + 6], fill=PAPER, width=3)
d.text((cx0 + 64, chk_y + 1), "подписать на всю рассылку", font=onest(17, 400), fill=PAPER_DIM)

wf = onest(34, 800)
endx = tracked(d, (M, 48), "сафронов", wf, INK, -34 * 0.05)
dot_d = int(34 * 0.62)
d.ellipse([endx + 3, 48 + 34 - dot_d - 2, endx + 3 + dot_d, 48 + 34 - 2], fill=REAGENT)

hf = onest(96, 800); tr = -96 * 0.035
tracked(d, (M - 2, 168), "10 ГРЯЗНЫХ", hf, INK, tr)
tracked(d, (M - 2, 266), "ПРИЁМОВ", hf, INK, tr)

d.text((M, 398), "Как тебя разводят каждый день.\nИ почему я так не делаю.",
       font=onest(27, 500), fill=(52, 50, 46), spacing=10)

d.text((M, H - 78), "ЛАБОРАТОРИЯ САФРОНОВА · ГИПОТЕЗА → ПРОДАЖИ", font=jbm(14), fill=DUST)
hx = tracked(d, (M, H - 50), "@safronov_ads", jbm(16), INK, 0)
d.text((hx + 12, H - 50), "· САФ/11", font=jbm(16), fill=REAGENT)

out = BASE + "/cover_dark.png"
img.save(out, "PNG")
print("saved", img.size, out)
