#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Фірмові елементи «Біблійної Години»: логотип у кольорі рівня.

Замовник дав логотип білим силуетом на прозорому тлі. На кольоровій плашці
обкладинки він лягає як є, але на сторінках 2–8 тло біле — там логотип був би
невидимий. Рішення замовника від 6 серпня: перефарбовувати в **колір рівня**,
той самий, яким набрана шапка першої сторінки.

Прозорість оригіналу і є маскою: усі непрозорі пікселі чисто білі, а краї
згладжені саме альфою, тож перефарбування зводиться до «RGB = колір рівня,
альфа — як була». Згладжування країв від цього не страждає.

    .venv/bin/python ua_build/brand.py            # згенерувати всі п'ять
"""
import os
import sys

import fitz

HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)

from lessons import LEVELS                                  # noqa: E402

SRC = os.path.join(os.path.dirname(HERE), 'data', 'bibletime-logo-ua.png')
OUT_DIR = os.path.join(os.path.dirname(HERE), 'data', 'logo')


def recolour(src, rgb):
    """Білий силует → силует кольору `rgb` (0–255), альфа лишається.

    Повертає `fitz.Pixmap` з альфа-каналом.
    """
    pm = fitz.Pixmap(src)
    if not pm.alpha:
        raise ValueError('логотип має бути з альфа-каналом')
    n = pm.n                       # для сірого з альфою n = 2
    s = pm.samples
    out = bytearray(pm.width * pm.height * 4)
    r, g, b = rgb
    for i in range(pm.width * pm.height):
        a = s[i * n + (n - 1)]
        j = i * 4
        out[j] = r
        out[j + 1] = g
        out[j + 2] = b
        out[j + 3] = a
    return fitz.Pixmap(fitz.csRGB, pm.width, pm.height, bytes(out), True)


def path_for(level):
    return os.path.join(OUT_DIR, f'logo_L{level}.png')


def main():
    os.makedirs(OUT_DIR, exist_ok=True)
    for n, lv in LEVELS.items():
        rgb = (lv.colour >> 16 & 255, lv.colour >> 8 & 255, lv.colour & 255)
        pm = recolour(SRC, rgb)
        pm.save(path_for(n))
        print(f'рівень {n}: #{lv.colour:06x} → {os.path.relpath(path_for(n))}')
    # білий варіант для кольорової плашки обкладинки
    white = os.path.join(OUT_DIR, 'logo_white.png')
    fitz.Pixmap(SRC).save(white)
    print('білий (для плашки обкладинки):', os.path.relpath(white))


if __name__ == '__main__':
    main()
