#! python2
import io, os, json, re
from collections import OrderedDict

with io.open('../_locales/en/messages.json', 'r', encoding='utf-8') as f:
    items = json.load(f).items()
    english = [(k, v['message']) for k, v in items if 'message' in v]
    english_placeholders = [(k, v['placeholders']) for k,v in items
                            if 'placeholders' in v]

for locale_name in os.listdir('../_locales'):
    if locale_name == 'en':
        continue
    if not re.match(r'^\w{2}(_\w{2,3})?$', locale_name):
        print('Skipped %s: not a locale dir' % locale_name)
        continue
    loc_path = '../_locales/' + locale_name + '/messages.json'
    with io.open(loc_path, 'r+', encoding='utf-8') as f:
        loc = json.load(f, object_pairs_hook=OrderedDict)

        deduplicated = 0
        for msgId, message in english:
            if msgId in loc and loc[msgId].get('message', '') == message:
                del loc[msgId]
                deduplicated += 1

        changed = 0
        for msgId, placeholder in english_placeholders:
            if msgId in loc and cmp(placeholder, loc[msgId].get('placeholders', None)) != 0:
                loc[msgId]['placeholders'] = placeholder
                changed += 1

        if deduplicated > 0 or changed > 0:
            f.seek(0)
            json_str = json.dumps(loc, indent=1, ensure_ascii=False,
                                  separators=(',', ': '), encoding='utf-8')
            json_tabs = re.sub(r'^\s+', lambda s: s.group(0).replace(' ', '\t'),
                               json_str, flags=re.MULTILINE)
            f.write(json_tabs)
            f.truncate()
            print('%s: %d deduplicated%s' % (
                locale_name,
                deduplicated,
                ', %d placeholder(s) added' % changed if changed else ''
            ))