#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Contoh kreatif iklan The Skin Code — meniru gaya 2 referensi yang dikirim Bos (13 Okt 2026).

Catatan: logo di sini DIREKA ULANG secara tipografis (bukan file logo resmi klien),
supaya tidak ada kotak latar yang ikut terpotong. Untuk produksi, minta file logo PNG transparan.

Hasil: tsc_ads_sample/tsc_contoh_gelap.jpg dan tsc_contoh_terang.jpg (1080x1350, 4:5)
"""
import os
import sys

from PIL import Image, ImageDraw, ImageFilter, ImageFont, ImageEnhance, ImageOps

BASE = "/home/mantapman/.hermes/profiles/atun/workspace"
OUT = f"{BASE}/tsc_ads_sample"
FONT = f"{BASE}/fonts_tsc"
FOTO = f"{OUT}/pex_06_19999456.jpg"

W, H = 1080, 1350
GOLD = (241, 196, 83)
GOLD_LEMBUT = (232, 206, 140)
SLATE_TOP = (40, 50, 68)
SLATE_BOT = (58, 66, 87)
NAVY = (26, 52, 92)
HANDLE = "@theskincode_cllinic"
WEB = "www.theskincodeclinic.com"

f_script = lambda s: ImageFont.truetype(f"{FONT}/GreatVibes-Regular.ttf", s)
f_serif = lambda s: ImageFont.truetype(f"{FONT}/PlayfairDisplay.ttf", s)
f_sans = lambda s: ImageFont.truetype(f"{FONT}/Montserrat.ttf", s)
f_sansl = lambda s: ImageFont.truetype(f"{FONT}/Montserrat-Light.ttf", s)


def teks_track(d, xy, teks, font, fill, tracking=0, anchor="la", spasi=0, stroke=0, stroke_fill=None):
    x0, y0 = xy
    for bi, b in enumerate(teks.split("\n")):
        total = sum(d.textlength(ch, font=font) for ch in b) + tracking * max(len(b) - 1, 0)
        x = x0 - total / 2 if anchor[0] == "m" else (x0 - total if anchor[0] == "r" else x0)
        y = y0 + bi * (font.size + spasi)
        for ch in b:
            d.text((x, y), ch, font=font, fill=fill,
                   stroke_width=stroke, stroke_fill=stroke_fill)
            x += d.textlength(ch, font=font) + tracking


def gradien(ukuran, atas, bawah):
    g = Image.new("RGB", (1, ukuran[1]))
    for y in range(ukuran[1]):
        t = y / max(ukuran[1] - 1, 1)
        g.putpixel((0, y), tuple(int(atas[i] + (bawah[i] - atas[i]) * t) for i in range(3)))
    return g.resize(ukuran)


def tempel_lembut(canvas, foto, pusat, radius, blur=90, jari=0.10):
    """Tempel foto dengan topeng elips yang tipis di tepinya (tidak seperti tempelan kotak)."""
    rx, ry = radius
    f = foto.resize((int(rx * 2), int(ry * 2)), Image.LANCZOS)
    m = Image.new("L", f.size, 0)
    ImageDraw.Draw(m).ellipse([f.width * jari, f.height * jari * 0.7,
                               f.width * (1 - jari), f.height * (1 - jari * 0.7)], fill=255)
    m = m.filter(ImageFilter.GaussianBlur(blur))
    canvas.paste(f, (int(pusat[0] - rx), int(pusat[1] - ry)), m)


def logo_lockup(nama_size, warna, warna_sub, warna_s=None, skala=1.0):
    """Rekaan tipografis logo The Skin Code: S besar + nama + sub di kanannya."""
    warna_s = warna_s or warna
    fN = f_sans(nama_size)
    tracking = int(nama_size * 0.11)
    fT = f_sansl(max(int(nama_size * 0.44), 10))
    tmp = ImageDraw.Draw(Image.new("RGB", (10, 10)))
    lebar_nama = sum(tmp.textlength(ch, font=fN) for ch in "THE SKIN CODE") + tracking * 12
    fs = int(nama_size * 3.1)
    x_teks = int(fs * 0.62)
    lebar = int((x_teks + lebar_nama + 6) * skala)
    tinggi = int(fs * 1.12 * skala)
    im = Image.new("RGBA", (lebar, tinggi), (0, 0, 0, 0))
    d = ImageDraw.Draw(im)
    d.text((0, -int(fs * 0.20)), "S", font=f_serif(fs), fill=warna_s + (255,))
    teks_track(d, (x_teks, int(fs * 0.40)), "THE SKIN CODE", fN, warna + (255,), tracking)
    teks_track(d, (x_teks + 1, int(fs * 0.80)), "dermatology - venereology - esthetic",
               fT, warna_sub + (235,), int(nama_size * 0.028))
    return im


# ───────────────────────── KREATIF 1: GELAP ─────────────────────────
def kreatif_gelap():
    c = Image.new("RGB", (W, H), SLATE_TOP)
    c.paste(gradien((W, H), SLATE_TOP, SLATE_BOT), (0, 0))

    # glow lembut di belakang wajah
    lap = Image.new("L", (W, H), 0)
    ImageDraw.Draw(lap).ellipse([180, -120, 1080, 780], fill=70)
    lap = lap.filter(ImageFilter.GaussianBlur(220))
    c = Image.composite(Image.new("RGB", (W, H), (120, 142, 178)), c, lap)

    # model: duotone dingin biar menyatu dengan latar
    foto = Image.open(FOTO).convert("RGB").crop((280, 60, 1400, 1520))
    abu = ImageOps.grayscale(foto)
    model = ImageOps.colorize(abu, black=(20, 26, 38), white=(178, 192, 214))
    model = ImageEnhance.Contrast(model).enhance(0.96)
    tempel_lembut(c, model, (600, 540), (540, 690), blur=120, jari=0.15)

    d = ImageDraw.Draw(c)
    teks_track(d, (62, 88), HANDLE, f_sans(30), (236, 239, 245), 0.5)
    teks_track(d, (62, 128), WEB, f_sansl(24), (216, 222, 233), 0.3)

    teks_track(d, (468, 430), "Kulit", f_script(240), GOLD, 0, anchor="ma")
    teks_track(d, (468, 590), "glowing", f_script(250), GOLD, 0, anchor="ma")
    teks_track(d, (540, 800), "TANPA MAKEUP", f_sans(54), (255, 255, 255), 7, anchor="ma")
    teks_track(d, (540, 1020), "KULIT SEHAT ADALAH BENTUK", f_sansl(37), (238, 241, 246), 3, anchor="ma")
    teks_track(d, (540, 1072), "KECANTIKAN TERBAIK. INILAH CARA", f_sansl(37), (238, 241, 246), 3, anchor="ma")
    teks_track(d, (540, 1124), "MEMBIARKAN KULIT ALAMMU BERSINAR.", f_sansl(37), (238, 241, 246), 3, anchor="ma")

    logo = logo_lockup(44, (238, 241, 246), (196, 205, 220))
    c.paste(logo, (W - logo.width - 62, 60), logo)

    p = f"{OUT}/tsc_contoh_gelap.jpg"
    c.save(p, quality=94)
    print("ok:", p)


# ───────────────────────── KREATIF 2: TERANG ─────────────────────────
def kreatif_terang():
    c = Image.new("RGB", (W, H), (255, 255, 255))

    # kurva emas tipis (watermark)
    lap = Image.new("RGB", (W, H), (255, 255, 255))
    dl = ImageDraw.Draw(lap)
    dl.arc([-420, 540, 760, 1300], start=195, end=345, fill=GOLD_LEMBUT, width=4)
    dl.arc([-540, 700, 700, 1430], start=195, end=350, fill=(242, 224, 178), width=3)
    c = Image.blend(c, lap, 0.95)

    # model: high-key (latar studio dibawa ke arah putih)
    foto = Image.open(FOTO).convert("RGB").crop((230, 60, 1400, 1600))
    model = ImageEnhance.Brightness(foto).enhance(1.08)
    model = ImageEnhance.Contrast(model).enhance(0.92)
    model = Image.blend(model, Image.new("RGB", model.size, (253, 249, 244)), 0.14)
    # latar studio (abu) dinaikkan tepat ke putih supaya tepinya tidak terlihat
    bg = sum(model.getpixel((3, 3))) / 3
    skala = min(255.0 / max(bg, 1), 1.26)
    model = model.point(lambda v: min(255, int(v * skala)))
    tempel_lembut(c, model, (770, 840), (480, 620), blur=140, jari=0.09)

    d = ImageDraw.Draw(c)
    teks_track(d, (66, 92), HANDLE, f_sans(30), (62, 80, 112), 0.5)
    teks_track(d, (66, 132), WEB, f_sansl(24), (92, 110, 140), 0.3)

    teks_track(d, (88, 296), "Kunci", f_serif(170), NAVY, 0, spasi=24)
    teks_track(d, (88, 470), "kulit", f_serif(170), NAVY, 0, spasi=24)
    teks_track(d, (168, 556), "Bercahaya", f_script(190), GOLD, 0)

    dd = ImageDraw.Draw(c)
    dd.line([(92, 792), (340, 792)], fill=(214, 184, 118), width=3)
    dd.polygon([(322, 784), (340, 792), (322, 800)], fill=(214, 184, 118))

    teks_track(d, (92, 852), "Rawat kulitmu dengan", f_sans(46), NAVY, 0, spasi=20)
    teks_track(d, (92, 912), "lembut setiap hari.", f_sans(46), NAVY, 0, spasi=20)

    c_draw = ImageDraw.Draw(c)
    c_draw.arc([980, 1030, 1290, 1330], start=80, end=250, fill=GOLD_LEMBUT, width=3)

    logo = logo_lockup(48, (26, 52, 92), (86, 104, 134))
    c.paste(logo, (92, 1080), logo)

    p = f"{OUT}/tsc_contoh_terang.jpg"
    c.save(p, quality=94)
    print("ok:", p)


if __name__ == "__main__":
    if not os.path.exists(FOTO):
        sys.exit(f"aset tidak ada: {FOTO}")
    kreatif_gelap()
    kreatif_terang()
