#!/usr/bin/python3

import gettext
import glob
import gzip
import os
import sys

DATA_PATH = '/usr/share/localechooser/languagelist.data.gz'

lang_dir = 'po'
if len(sys.argv) > 1:
    lang_dir = sys.argv[1]

translations = set()
for fname in glob.glob('{}/*.po'.format(lang_dir)):
    translations.add(os.path.splitext(os.path.basename(fname))[0])

if not translations:
    print("found no languages", file=sys.stderr)
    sys.exit(1)

langs = [
    ('console', 'en_US', 'English'),
    ('console', 'en_GB', 'English (UK)'),
    ('ssh',     'kab',   'Tamaziɣt Taqbaylit'),
]

for level, code, name in langs:
    if code in translations:
        translations.remove(code)


def kind_for_level(level):
    if int(level) <= 2:
        return "console"
    else:
        return "ssh"


with gzip.open(DATA_PATH, mode='rt') as data:
    for line in data:
        level, code, name, desc = line.strip().split(':')
        if code not in translations:
            continue
        langs.append((kind_for_level(level), code, desc))
        translations.remove(code)

with gzip.open(DATA_PATH, mode='rt') as data:
    for line in data:
        level, code, name, desc = line.strip().split(':')
        code = code.split("_", 1)[0]
        if code not in translations:
            continue
        level = int(level)
        langs.append((kind_for_level(level), code, desc))
        translations.remove(code)

for code in translations:
    if gettext.find('iso_639_3', languages=[code]):
        native_lang = gettext.translation('iso_639_3', languages=[code])
        native = native_lang.gettext(name).capitalize()
        langs.append(('ssh', code, native))
    else:
        print('do not know native name for {}'.format(code), file=sys.stderr)
        sys.exit(1)

for level, code, name in langs:
    sys.stdout.write("{}:{}:{}\n".format(level, code, name))
