#!/usr/bin/env python3
import pycountry
import requests
import configparser
import os

contributorsFile = open("CONTRIBUTORS.md", "w")

###### Developers #####
MAINTAINERS = ['ByteHamster', 'keunes']
FORMER_MAINTAINERS = ['mfietz', 'TomHennen']

csvFile = open("app/src/main/assets/developers.csv", "w")
contributorsFile.write('# Developers\n\n')
page = 1
hasMore = True
first = True
while hasMore:
    nextPage = ('https://api.github.com/repos/Podcini/Podcini/contributors'
        + '?q=contributions&order=desc&per_page=100&page=' + str(page))
    print("Loading " + nextPage)
    json = requests.get(nextPage).json()
    for contributor in json:
        role = 'Contributor'
        if contributor['login'] == 'danieloeh':
            role = 'Original creator of Podcini (retired)'
        elif contributor['login'] in MAINTAINERS:
            role = 'Maintainer'
        elif contributor['login'] in FORMER_MAINTAINERS:
            role = 'Maintainer (retired)'
        csvFile.write(contributor['login'].replace(";", "") + ';' + str(contributor['id']) + ';' + role + '\n')
        if not first:
            contributorsFile.write(', ')
        first = False
        contributorsFile.write('[' + contributor['login'] + '](https://github.com/' + contributor['login'] + ')')
    page = page + 1
    hasMore = len(json) > 0
csvFile.close()

###### Translators #####
config = configparser.ConfigParser()
config.read(os.path.expanduser("~") + '/.transifexrc')
if 'https://www.transifex.com' in config and config['https://www.transifex.com']['username'] == 'api':
    TRANSIFEX_TOKEN = config['https://www.transifex.com']['token']
else:
    TRANSIFEX_TOKEN = ""

languages = dict()

nextPage = 'https://rest.api.transifex.com/team_memberships?filter[organization]=o:podcini'
while nextPage is not None:
    print("Loading " + nextPage)
    r = requests.get(nextPage,
            headers={'Authorization': 'Bearer ' + TRANSIFEX_TOKEN,
                    'Accept': 'application/vnd.api+json'})
    for item in r.json()['data']:
        language = item['relationships']['language']['data']['id']
        user = item['relationships']['user']['data']['id']
        if not language in languages:
            langCode = language.replace('l:', '')
            try:
                langName = pycountry.languages.lookup(langCode).name
            except:
                try:
                    langName = pycountry.languages.lookup(
                        langCode.split('_')[0]).name + ' (' + langCode + ')'
                except:
                    langName = code
                    print('\033[91mLanguage code not found:' + langCode + '\033[0m')
            languages[language] = {'name': langName, 'translators': []}
        languages[language]['translators'].append(user.replace('u:', ''))
    nextPage = r.json()['links']['next']

languages = list(languages.values())
languages.sort(key=lambda x : x['name'].lower())

csvFile = open("app/src/main/assets/translators.csv", "w")
contributorsFile.write('\n\n# Translators\n\n')
contributorsFile.write('| Language | Translators |\n| :-- | :-- |\n')
for language in languages:
    translators = sorted(language['translators'], key=str.lower)
    langName = language['name']
    joinedTranslators = ', '.join(translators).replace(';', '')
    contributorsFile.write('| ' + langName + ' | ' + joinedTranslators + ' |\n')
    csvFile.write(langName + ';' + joinedTranslators + '\n')
csvFile.close()
contributorsFile.close()

print('Done')

