#!/usr/bin/env python3

import json
from urllib.request import urlopen
from importlib.util import spec_from_file_location, module_from_spec
import icu

URL = 'https://hosted.weblate.org/exports/stats/weblate/website/'
THRESHOLD = 60


def print_language(lang, fmt='{0} ({1})'):
    '''
    Prints language code with its name.
    '''
    locale = icu.Locale(lang)
    print(
        fmt.format(
            lang,
            locale.getDisplayName(locale).capitalize()
        )
    )


def main():
    # load data
    handle = urlopen(URL)
    data = handle.read()
    handle.close()
    # parse data
    data = json.loads(data)

    # select languages
    languages = []
    for lang in data:
        if lang['translated_percent'] > THRESHOLD:
            code = lang['code'].replace('_', '-').lower()
            if code == 'be-latn':
                code = 'be@latin'
            elif code == 'nb-no':
                code = 'nb'
            languages.append(code)
    languages.sort()
    print('Expected setup:')
    for lang in languages:
        print_language(lang, fmt="    ('{0}', '{1}'),")

    # prepare for checking
    languages = set(languages)
    # we always want english language
    languages.add('en')
    # load settings
    extra = set()
    spec = spec_from_file_location('settings', './weblate_web/settings.py')
    settings = module_from_spec(spec)
    spec.loader.exec_module(settings)
    for lang in settings.LANGUAGES:
        if lang[0] in languages:
            languages.remove(lang[0])
        else:
            extra.add(lang[0])
    # Print results
    if len(extra) > 0:
        print('Extra languages:')
        for lang in extra:
            print_language(lang)
    if len(languages) > 0:
        print('Missing languages:')
        for lang in languages:
            print_language(lang)

if __name__ == "__main__":
    main()
