# -*- coding: utf-8 -*-
"""
NUD 自定义语法库示例：emoji 表情库
==================================
写一个 Python 文件放到 NUD 的 lib/ 目录（如 lib/emoji.py），
NUD 代码里写 import emoji 就能用：

    /being/
    import emoji
    /emoji/开心
    /emoji/生气

库需要提供：
  parse_line(content, line_num, sm_imported)  → (节点dict, 错误) 或 (None, None)
  execute(node, env, registry, moves, output) → 执行逻辑，output 用于打印
"""
import re

LIB_NAME = "emoji"
LIB_VERSION = "1.0.0"
LIB_DESCRIPTION = "表情库：/emoji/名字 输出对应表情"

# 表情表：可以自己加
EMOJI_MAP = {
    '开心': '😊',
    '生气': '😠',
    '伤心': '😢',
    '惊喜': '😲',
    '点赞': '👍',
    '星星': '⭐',
}

_EMOJI_RE = re.compile(r'^/emoji/([一-龥A-Za-z_][一-龥A-Za-z0-9_]*)$')


def parse_line(content, line_num, sm_imported):
    """识别 /emoji/名字 这行。不认识的行返回 (None, None)。"""
    m = _EMOJI_RE.match(content)
    if not m:
        return None, None
    name = m.group(1)
    if name not in EMOJI_MAP:
        return None, f'没有这个表情: {name}（可用: {"、".join(EMOJI_MAP)}）'
    return {'type': 'EMOJI_PRINT', 'line': line_num, 'name': name}, None


def execute(node, env, registry, moves, output=None):
    """执行：把表情打印出来。output 是输出列表，每项 (文字, 颜色)。"""
    name = getattr(node, 'name', '')
    if output is not None:
        output.append((EMOJI_MAP.get(name, ''), None))
    # 实时回调（IDE 边运行边显示），不传也不影响
    cb = env.get('_print_cb')
    if callable(cb):
        try:
            cb(EMOJI_MAP.get(name, ''), None)
        except Exception:
            pass
    return None
