import json
import subprocess
import sys
from multiprocessing.dummy import Pool


def shell(command):
    _ps = subprocess.Popen(
        command.split(),
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE
    ).communicate()[0].decode()

    return _ps


def get_versions(pkg):
    # get the info for the package
    _pkg_info = shell('apt-cache policy ' + pkg)

    _installed = 'none'
    _candidate = 'none'

    # extract the installed and candidate
    for line in _pkg_info.splitlines():
        if line.find("Installed") > 0:
            _installed = line.split(':', 1)[1].strip()
        elif line.find("Candidate") > 0:
            _candidate = line.split(':', 1)[1].strip()
    return [pkg, _installed, _candidate, _pkg_info]


# get list of packages
_list = shell("apt list --installed")
pkg_list = _list.splitlines()
pkg_list = [_pkg.split('/')[0] for _pkg in pkg_list[1:]]

# threading pool
pool = Pool(10)

result = pool.map(get_versions, pkg_list)

# init pkg storage
pkgs = {}
for res in result:
    _pkg = res[0]
    if _pkg not in pkgs:
        pkgs[_pkg] = {}
    pkgs[_pkg]['installed'] = res[1]
    pkgs[_pkg]['candidate'] = res[2]
    pkgs[_pkg]['raw'] = res[3]

buff = json.dumps(pkgs)
if len(sys.argv) > 1 and sys.argv[1] == 'stdout':
    sys.stdout.write(buff)
else:
    print(buff)
