# -*- coding: utf-8 -*-
"""A4 板报标题叠字：彩色版三层描边 / 线稿版空心字+白底衬"""
import os
from PIL import Image, ImageDraw, ImageFont

BASE_DIR = '/data/www/files/heibanbao3in1'
RICH, LINE = f'{BASE_DIR}/rich', f'{BASE_DIR}/line_rich'
OUT_C, OUT_L = f'{BASE_DIR}/color_a4', f'{BASE_DIR}/line_a4'
os.makedirs(OUT_C, exist_ok=True)
os.makedirs(OUT_L, exist_ok=True)

FONT = '/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc'
IDX = 2  # SC face

TITLES = {
 '1_三联幅_安全反诈禁毒': ('平安校园 三防同行', '安全教育 · 防范电信网络诈骗 · 禁毒教育'),
 '2_三色竖栏_安全反诈禁毒': ('自律成长 平安相伴', '校园安全 · 反诈防骗 · 远离毒品'),
 '4_中心徽章_安全反诈禁毒': ('成长守护盾', '安全教育 · 反诈防骗 · 远离毒品'),
}

RED, YEL, WHITE, NAVY = (214, 40, 40), (255, 210, 74), (255, 255, 255), (27, 79, 156)


def fit_fs(text, target_w=2300, cap=290):
    n = len(text.replace(' ', '')) + text.count(' ') * 0.55
    return int(min(cap, target_w / max(n, 1)))


def colour_title(base, title, fs, y_main, y_sub):
    img = base.convert('RGB')
    d = ImageDraw.Draw(img)
    cx = img.width // 2
    f = ImageFont.truetype(FONT, fs, index=IDX)
    d.text((cx, y_main), title[0], font=f, fill=WHITE,
           stroke_width=max(18, fs // 8), stroke_fill=WHITE, anchor='ms')
    d.text((cx, y_main), title[0], font=f, fill=YEL,
           stroke_width=max(9, fs // 17), stroke_fill=YEL, anchor='ms')
    d.text((cx, y_main), title[0], font=f, fill=RED, anchor='ms')
    f2 = ImageFont.truetype(FONT, 54, index=IDX)
    d.text((cx, y_sub), title[1], font=f2, fill=NAVY, stroke_width=7, stroke_fill=WHITE, anchor='ms')
    return img


def hollow_title(base, title, fs, y_main, y_sub):
    img = base.convert('RGB')
    d = ImageDraw.Draw(img)
    cx = img.width // 2
    f = ImageFont.truetype(FONT, fs, index=IDX)
    d.text((cx, y_main), title[0], font=f, fill=WHITE,
           stroke_width=max(16, fs // 12), stroke_fill=WHITE, anchor='ms')
    d.text((cx, y_main), title[0], font=f, fill=WHITE,
           stroke_width=max(6, fs // 26), stroke_fill=(25, 25, 25), anchor='ms')
    f2 = ImageFont.truetype(FONT, 54, index=IDX)
    d.text((cx, y_sub), title[1], font=f2, fill=WHITE, stroke_width=10, stroke_fill=WHITE, anchor='ms')
    d.text((cx, y_sub), title[1], font=f2, fill=(25, 25, 25), anchor='ms')
    return img


if __name__ == '__main__':
    for name, title in TITLES.items():
        fs = fit_fs(title[0])
        y_main = int(fs * 1.05)
        y_sub = y_main + int(fs * 0.40) + 20
        c = colour_title(Image.open(os.path.join(RICH, name + '.jpg')), title, fs, y_main, y_sub)
        c.save(os.path.join(OUT_C, name + '.jpg'), quality=95, subsampling=0, dpi=(300, 300))
        p2 = os.path.join(LINE, name + '.jpg')
        if os.path.exists(p2):
            l = hollow_title(Image.open(p2), title, fs, y_main, y_sub)
            l.save(os.path.join(OUT_L, name + '.jpg'), quality=95, subsampling=0, dpi=(300, 300))
        print('OK', name, 'fs', fs, 'y', y_main, y_sub)
