#!/usr/bin/env python3

# Convert emoji file downloaded using tools/fetch-unicode-emoji-data
# into what is required by ZT.

from pathlib import Path, PurePath


try:
    # Ignored for type-checking, as it is a temporary file, deleted at the end of file
    from zulipterminal.unicode_emoji_dict import (  # type: ignore [import-not-found,import-untyped,unused-ignore]
        EMOJI_NAME_MAPS,
    )
except ModuleNotFoundError:
    print(
        "ERROR: Could not find downloaded unicode emoji\n"
        "Try fetching the unicode first using tools/fetch-unicode-emojis-data"
    )
    exit(1)

DOCSTRING = "Unicode emoji data, synchronized semi-regularly with the server source"
WORKING_FOLDER = Path(__file__).resolve().parent.parent / "zulipterminal"
INPUT_FILE = WORKING_FOLDER / "unicode_emoji_dict.py"
OUTPUT_FILE = WORKING_FOLDER / "unicode_emojis.py"

SCRIPT_NAME = PurePath(__file__).name

emoji_dict = EMOJI_NAME_MAPS

emoji_map = {}
for emoji_code, emoji_data in emoji_dict.items():
    emoji_map[emoji_data["canonical_name"]] = {
        "code": emoji_code,
        "aliases": emoji_data["aliases"],
    }

ordered_emojis = dict(sorted(emoji_map.items()))

with OUTPUT_FILE.open("w") as f:
    f.write(
        "\n".join(
            [
                '"""',
                DOCSTRING,
                '"""',
                "# Ignore long lines",
                "# ruff: noqa: E501",
                "",
                "# fmt: off",
                f"# Generated automatically by tools/{SCRIPT_NAME}",
                "# Do not modify.\n",
                "EMOJI_DATA = {\n",
            ]
        )
    )
    for emoji_name, emoji in ordered_emojis.items():
        # {'smile': {'code': '263a', 'aliases': []}}
        f.write(f'    "{emoji_name}": {emoji},\n')
    f.write(
        "\n".join(
            [
                "}",
                "# fmt: on",
                "",
            ]
        )
    )

print(f"Emoji list saved in {OUTPUT_FILE}")

try:
    INPUT_FILE.unlink()
    print(f"{INPUT_FILE} deleted.")
except Exception as exc:
    print(f"Warning: Could not delete file:\n{exc}")
