#!/usr/bin/env python3

import os
import sys
import urllib
import urllib.request
import re

error = False

try:
    response = urllib.request.urlopen('https://gitlab.freedesktop.org/libfprint/wiki/-/wikis/Unsupported-Devices.md')
except:
    print("Could not download current list of unsupported devices, skipping test.")
    sys.exit(77)
data = response.read().decode('utf-8')

devices = []
devices_re = re.compile(r'^.*([0-9a-fA-F]{4}):([0-9a-fA-F]{4}).*$', re.MULTILINE)
for m in devices_re.finditer(data):
    vid = m.group(1)
    pid = m.group(2)
    devices.append((vid, pid))

generator = open(os.path.join(os.path.dirname(__file__), '..', 'libfprint', 'fprint-list-udev-hwdb.c')).read()

id_re = re.compile('  { .vid = 0x([a-fA-F0-9]*), .pid = 0x([a-fA-F0-9]*) }')
# Check everything is the same
started = False
for l in generator.split('\n'):
    m = id_re.match(l)
    if m is None:
        # Stop on the first line that does not match anymore
        if started:
            break
        continue
    else:
        started = True

    vid_pid = (m.group(1), m.group(2))
    try:
        devices.remove(vid_pid)
    except ValueError:
        print("Generator has entry that is not on wiki: {}:{}".format(*vid_pid))
        error = True

for vid_pid in devices:
    print("New entry from wiki is missing: {}:{}".format(*vid_pid))
    error = True

if error:
    sys.exit(1)
else:
    sys.exit(0)