#  -*- coding: utf-8 -*-
"""Helpers to encode Japanese characters.

I doubt that this currently works correctly.
"""


try:
    import jaconv
except ImportError:
    jaconv = None


def encode_katakana(text: str) -> bytes:
    """I don't think this quite works yet."""
    encoded = []
    for char in text:
        if jaconv:
            # try to convert japanese text to half-katakanas
            char = jaconv.z2h(jaconv.hira2kata(char))
            # TODO: "the conversion may result in multiple characters"
            # If that really can happen (I am not really shure), than the string would have to be split and every single
            #  character has to passed through the following lines.

        if char in TXT_ENC_KATAKANA_MAP:
            encoded.append(TXT_ENC_KATAKANA_MAP[char])
        else:
            # TODO doesn't this discard all that is not in the map? Can we be sure that the input does contain only
            # encodable characters? We could at least throw an exception if encoding is not possible.
            pass
    return b"".join(encoded)


TXT_ENC_KATAKANA_MAP = {
    # Maps UTF-8 Katakana symbols to KATAKANA Page Codes
    # TODO: has this really to be hardcoded?
    # Half-Width Katakanas
    "｡": b"\xa1",
    "｢": b"\xa2",
    "｣": b"\xa3",
    "､": b"\xa4",
    "･": b"\xa5",
    "ｦ": b"\xa6",
    "ｧ": b"\xa7",
    "ｨ": b"\xa8",
    "ｩ": b"\xa9",
    "ｪ": b"\xaa",
    "ｫ": b"\xab",
    "ｬ": b"\xac",
    "ｭ": b"\xad",
    "ｮ": b"\xae",
    "ｯ": b"\xaf",
    "ｰ": b"\xb0",
    "ｱ": b"\xb1",
    "ｲ": b"\xb2",
    "ｳ": b"\xb3",
    "ｴ": b"\xb4",
    "ｵ": b"\xb5",
    "ｶ": b"\xb6",
    "ｷ": b"\xb7",
    "ｸ": b"\xb8",
    "ｹ": b"\xb9",
    "ｺ": b"\xba",
    "ｻ": b"\xbb",
    "ｼ": b"\xbc",
    "ｽ": b"\xbd",
    "ｾ": b"\xbe",
    "ｿ": b"\xbf",
    "ﾀ": b"\xc0",
    "ﾁ": b"\xc1",
    "ﾂ": b"\xc2",
    "ﾃ": b"\xc3",
    "ﾄ": b"\xc4",
    "ﾅ": b"\xc5",
    "ﾆ": b"\xc6",
    "ﾇ": b"\xc7",
    "ﾈ": b"\xc8",
    "ﾉ": b"\xc9",
    "ﾊ": b"\xca",
    "ﾋ": b"\xcb",
    "ﾌ": b"\xcc",
    "ﾍ": b"\xcd",
    "ﾎ": b"\xce",
    "ﾏ": b"\xcf",
    "ﾐ": b"\xd0",
    "ﾑ": b"\xd1",
    "ﾒ": b"\xd2",
    "ﾓ": b"\xd3",
    "ﾔ": b"\xd4",
    "ﾕ": b"\xd5",
    "ﾖ": b"\xd6",
    "ﾗ": b"\xd7",
    "ﾘ": b"\xd8",
    "ﾙ": b"\xd9",
    "ﾚ": b"\xda",
    "ﾛ": b"\xdb",
    "ﾜ": b"\xdc",
    "ﾝ": b"\xdd",
    "ﾞ": b"\xde",
    "ﾟ": b"\xdf",
}
