#!/usr/bin/env python3

import urllib.request
import re
import subprocess as sp

PATTERN = r'<a\shref="(?P<link>\d\.\d/)">(?P<version>\d\.\d)/</a>\s+(?P<date>\d{2}-[A-Z][a-z]{2}-\d{4} \d{2}:\d{2})\s+-'
PKG_NAME = "zabbix-server-pgsql"


def parse_apt_version(version_str):
    return list(map(int, version_str.split(":")[1].split("-")[0].split(".")))[:2]


def get_installation():
    command = ["apt", "show", PKG_NAME]
    version = None
    source = None
    for line in sp.check_output(
            command, stderr=sp.PIPE, universal_newlines=True).splitlines():
        if line.startswith("Version:"):
            version = parse_apt_version(line.split(":", 1)[1])
        elif line.startswith("APT-Sources:"):
            source = line.split(":", 1)[1].strip()
    return version, source


def get_remote_versions():
    response = urllib.request.urlopen("https://repo.zabbix.com/zabbix/")
    page_content = response.read().decode("utf-8")
    for match in re.findall(PATTERN, page_content):
        link, version, date = match
        major, minor = map(int, version.split("."))
        if minor % 2 == 0:
            yield (major, minor), date


def main():
    current_version, source = get_installation()
    if not source.startswith("http://repo.zabbix.com/"):
        return
    current_major, current_minor = current_version
    highest_version, date = sorted(get_remote_versions())[-1]
    if (current_major, current_minor) < highest_version:
        print(
            "New Zabbix version is available: {} from {}, please upgrade!".format(
                '.'.join(map(str, highest_version)),
                date))

if __name__ == "__main__":
    main()