#!/usr/bin/env python3
import requests
import sys
import subprocess

PLUGIN_PREFIX = 'ajenti.plugin.'

installed = {}
for l in subprocess.check_output([sys.executable, '-m', 'pip', 'freeze']).decode().splitlines():
    if l:
        package = l.split('==')[0]
        version = l.split('==')[-1]
        if package:
            if package.startswith(PLUGIN_PREFIX) or package in ['aj', 'ajenti-panel', 'ajenti-dev-multitool']:
                installed[package] = version

if sys.stdout.isatty():
    sys.stdout.write('[' + ' ' * len(installed) + ']\r[')
    sys.stdout.flush()

pending = {}

for package in installed:
    data = requests.get(f'https://pypi.python.org/pypi/{package}/json').json()
    if sys.stdout.isatty():
        sys.stdout.write('.')
        sys.stdout.flush()
    version = data.get('info', {}).get('version', None)
    if not version:
        continue
    if version != installed[package]:
        pending[package] = version

if sys.stdout.isatty():
    sys.stdout.write('\n')


if len(sys.argv) == 1:
    for package, version in pending.items():
        print(f'Upgrading {package} to {version}')
        subprocess.check_call([sys.executable, '-m', 'pip', 'install', f'{package}=={version}'])
else:
    if sys.argv[1] == 'list':
        for package, version in pending.items():
            print(f'{package} upgradable to {version}')
    else:
        print(f'Unknown command: {sys.argv[1]}')
        print('Valid commands: list')
        sys.exit(1)
