"""Vẽ chữ lẫn emoji lên ảnh: dùng chung cho .info và ảnh chào nhóm."""

import emoji


def draw_text_line(draw, text, x, y, font, emoji_font, text_color):
    """Vẽ từng ký tự, đổi sang font emoji khi gặp emoji."""
    for char in text:
        f = emoji_font if emoji.emoji_count(char) else font
        draw.text((x, y), char, fill=text_color, font=f)
        x += f.getlength(char)


def split_text_into_lines(text, font, emoji_font, max_width):
    """Ngắt dòng theo bề rộng thật của từng ký tự (emoji rộng hơn chữ)."""
    lines = []
    for paragraph in text.splitlines():
        words = paragraph.split()
        line = ""
        for word in words:
            temp_line = line + word + " "
            width = sum(emoji_font.getlength(c) if emoji.emoji_count(c) else font.getlength(c) for c in temp_line)
            if width <= max_width:
                line = temp_line
            else:
                if line:
                    lines.append(line.strip())
                line = word + " "
        if line:
            lines.append(line.strip())
    return lines


if __name__ == "__main__":
    # self-check với font giả: mỗi ký tự rộng 10, emoji rộng 20
    class FakeFont:
        def __init__(self, width):
            self.width = width

        def getlength(self, text):
            return self.width * len(text)

    font, emoji_font = FakeFont(10), FakeFont(20)
    assert split_text_into_lines("mot hai ba", font, emoji_font, 1000) == ["mot hai ba"]
    # bề rộng tính cả dấu cách cuối: "mot hai " = 8 ký tự = 80
    assert split_text_into_lines("mot hai ba", font, emoji_font, 80) == ["mot hai", "ba"]
    assert split_text_into_lines("mot hai ba", font, emoji_font, 70) == ["mot", "hai ba"]
    assert split_text_into_lines("dong1\ndong2", font, emoji_font, 1000) == ["dong1", "dong2"]
    assert split_text_into_lines("", font, emoji_font, 100) == []
    # emoji rộng gấp đôi nên phải ngắt sớm hơn chữ thường
    assert len(split_text_into_lines("😀 😀 😀", font, emoji_font, 50)) > 1
    print("text_render self-check OK")
