#!/usr/bin/env python3

# Convert *.h to *.json
# Usage: ./h2json.py msg_has_us.h

import re
import sys
import json

try:
    h_filename = sys.argv[1]
    json_filename = h_filename.replace('.h', '.json')
except IndexError:
    print("Usage: ./h2json.py msg_has_us.h")
    sys.exit(1)

p = re.compile('MSG_HASH\(\s*[A-Z0-9_]+,\s*\".*\"\s*\)')

header = """#if defined(_MSC_VER) && !defined(_XBOX) && (_MSC_VER >= 1500 && _MSC_VER < 1900)
#if (_MSC_VER >= 1700)
/* https://support.microsoft.com/en-us/kb/980263 */
#pragma execution_character_set("utf-8")
#endif
#pragma warning(disable:4566)
#endif
"""


def parse_message(message):
    key_start = message.find('(') + 1
    key_end = message.find(',')
    key = message[key_start:key_end].strip()
    value_start = message.find('"') + 1
    value_end = message.rfind('"')
    value = message[value_start:value_end].strip()
    return key, value


try:
    with open(h_filename, 'r+') as h_file:
        text = h_file.read()
        result = p.findall(text)
        seen = set()
        messages = {}
        for msg in result:
            key, val = parse_message(msg)
            messages[key] = val
            if key not in seen:
                seen.add(key)
            else:
                print("Duplicate key: " + key)
        with open(json_filename, 'w') as json_file:
            json.dump(messages, json_file, indent=2)
except EnvironmentError:
    print('Cannot read/write ' + h_filename)