#!python
import os

import requests
import sys

CROWDIN_PROJECT_ID = os.environ['CROWDIN_PROJECT_ID']
CROWDIN_TOKEN = os.environ['CROWDIN_TOKEN']
CROWDIN_BASE_URL = os.environ['CROWDIN_BASE_URL']

BRANCH = sys.argv[1]

headers = {
    'Authorization': 'Bearer ' + CROWDIN_TOKEN,
    'Accept': 'application/json'
}

# Load language mappings
r = requests.get('%s/api/v2/languages?limit=500' % CROWDIN_BASE_URL)
r.raise_for_status()

# Map Crowdin codes to locale codes
languages = {lang['data']['id']: lang['data']['locale'].replace('-', '_') for lang in r.json()['data']}

branchId = None
r = requests.get('%s/api/v2/projects/%s/branches' % (CROWDIN_BASE_URL, CROWDIN_PROJECT_ID), headers=headers)
r.raise_for_status()
for language in r.json()['data']:
    if language['data']['name'] == BRANCH:
        branchId = language['data']['id']
if not branchId:
    sys.exit(f"Could not find specified branch: ${branchId}!")

r = requests.get('%s/api/v2/projects/%s/branches/%s/languages/progress?limit=500' %
                 (CROWDIN_BASE_URL, CROWDIN_PROJECT_ID, branchId), headers=headers)
r.raise_for_status()

locales = []
for language in r.json()['data']:
    # Include only languages with at least 5% progress
    if language['data']['translationProgress'] >= 5 or language['data']['languageId'].startswith('en-'):
        locales.append(languages[language['data']['languageId']])
    else:
        print("[%s] Skipping %s with %d%% completion" %
              (branchId, language['data']['languageId'], language['data']['translationProgress']), file=sys.stderr)

# Sort locales
locales.sort()

# Add special In-Context Localization language
locales.append('translate')

# Print result (locales separated by space)
print(' '.join(locales))
