#!/usr/bin/python3

import re
import sys
from collections import defaultdict
import pathlib

REs = {
    'deb': r'(?P<name>[\w-]*)_(?P<version>[\d.]*)-(?P<subver>\d)(?P<dist>\w*)_(?P<arch>[\w\d]*)\.deb',
    'rpm': r'(?P<name>.+)-(?P<version>[^-]+)-(?P<relver>[^.]+)\.(?P<dist>[^.]+)\.(?P<arch>[^.]+)\.rpm',
}

tests = [
    'python3-ceph-common-20.1.0-0.el9.aarch64.rpm',
    'ceph-20.1.0-0.el9.aarch64.rpm',
    'rbd-nbd-20.1.0-0.el9.x86_64.rpm',
    'ceph-20.1.0-0.el9.x86_64.rpm',
    'cephadm-20.1.0-0.el9.noarch.rpm',
    'cephfs-top-20.1.0-0.el9.noarch.rpm',
    'python3-rados_20.1.0-1jammy_amd64.deb',
    'python3-rados_20.1.0-1jammy_arm64.deb',
    'python3-rados_20.1.0-1noble_amd64.deb',
    'python3-rados_20.1.0-1noble_arm64.deb',
    'python3-rados-dbg_20.1.0-1jammy_amd64.deb',
    'python3-rados-dbg_20.1.0-1jammy_arm64.deb',
    'python3-rados-dbg_20.1.0-1noble_amd64.deb',
    'python3-rados-dbg_20.1.0-1noble_arm64.deb',
    'python3-rbd_20.1.0-1jammy_amd64.deb',
    'python3-rbd_20.1.0-1jammy_arm64.deb',
    'python3-rbd_20.1.0-1noble_amd64.deb',
    'python3-rbd_20.1.0-1noble_arm64.deb',
]


def main():
    dists = defaultdict(set)
    archs = defaultdict(set)
    allpkgs = defaultdict(list)
    count = 0

    for p in pathlib.Path('.').rglob('*'):
        if not (p.is_file() and p.suffix in ['.deb', '.rpm']):
            continue
        ext = p.suffix[1:]
        p = p.name
        # print(f'{p} {ext}')
        match = re.match(REs[ext], p)
        if match is None:
            print(f'can\'t match {p} as pkgname', file=sys.stderr)
            continue

        if ext == 'deb':
            name, version, subver, dist, arch = match.groups()
        elif ext == 'rpm':
            name, version, relver, dist, arch = match.groups()

        # print(f'{p} {ext} {name} {version} {dist} {arch}')
        dists[ext].add(dist)
        archs[ext].add(arch)
        allpkgs[ext, dist, arch].append(p)

        count += 1

    print(f'total pkgs: {count}')

    for ext in ['rpm', 'deb']:
        for dist in dists[ext]:
            for arch in archs[ext]:
                print(f'{dist}/{arch}: {len(allpkgs[ext, dist, arch])}')


if __name__ == "__main__":
    sys.exit(main())
